从一个大数组中每次取出两个元素填充到另一个数组中

3
我有一个由10个随机元素组成的数组,生成方式如下:
             for ( j = 0;j<10;j++)
                {

                    file[j] = rand();

                    printf("Element[%d] = %d\n", j, file[j] );                  
                }

然后我生成一个由两个元素组成的新数组。该数组的值取自上面的数组,并放入具有2个元素的数组中。就像下面的代码示例一样:
         for(i = packet_count, j = 0; j < 2; ++j, ++i)
            {
                    packet[j] = file[i] ;
                    ++packet_count ;
                    printf("\npacket: %d", packet[j]);

            }
                printf("\nTransmit the packet: %d Bytes", sizeof(packet));

输出结果如下:
Telosb mote Timer start.
Element[0] = 36
Element[1] = 141
Element[2] = 66
Element[3] = 83
Element[4] = 144
Element[5] = 137
Element[6] = 142
Element[7] = 175
Element[8] = 188
Element[9] = 69

packet: 36
packet: 141
Transmit the packet: 2 Bytes
我想遍历数组,取出接下来的两个值并将它们放入数据包数组中,直到数组的最后一个元素。
3个回答

2

您可以遍历大数组,并选择要复制到小数组中的值,当 j 等于 2 时,将其重置为零:

j = 0;
for(i = 0; i < 10; i++) {
  packet[j] = file[i];
  printf("\npacket: %d", packet[j]);
  j++;
  if(j == 2) { 
    j = 0;
    printf("\nTransmit the packet: %d Bytes", sizeof(packet));
  }
}

2

使用取模运算符。例如:

for(i = 0; i < 10; ++i)
{
    packet[i % 2] = file[i] ;
    printf("\npacket: %d", packet[i % 2]);

    if(i % 2)
        printf("\nTransmit the packet: %d Bytes", sizeof(packet));
}

2

这里已经发布了许多有趣的解决方案。但我想再添加一个。您也可以使用异或运算符。 c=c^1 可以在 0 和 1 之间翻转 c 的值。当 c=0,c^1=1 时,当 c=1,c^1=0 时。

int i,c=0;
for(i=0;i<10;i++)
{
     packet[c] = file[i];         
     printf("\npacket: %d", packet[c]);
     if(c==1)
         printf("\nTransmit the packet: %d Bytes", sizeof(packet));
     c=c^1;
}

希望这有所帮助。祝编码愉快!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接