在C

时间:2015-09-10 23:34:17

标签: c arrays

所以我有两个动态分配的整数变量(A和B)。它们中的每一个都是12的大小,每个都是48个字节。我想以字节为单位从一个数据传输到另一个数据,并希望在32轮(循环)中完成传输。我将在下面描述我想要实现的目标:

  • 第1轮:阵列A到阵列B的前2个字节(字节1和2)
  • 第2轮:接下来2个数组A到字节B的字节(字节3和4)

继续将2个字节传输到第16轮。在第16轮中,将传输第31个和第32个字节。

然后从第17轮到第32轮,传输速率为1字节/回合,即

  • 第17轮:从A到B的第33个字节
  • 第18轮:从A到B的第34个字节

...

  • 第32轮:从A到B的第48个字节

下面我附上了一段代码:

int *A,*B;

    A = (int *)malloc(12*sizeof(int));
    B = (int *)malloc(12*sizeof(int));

    for(int i= 0;i<12;i++)
     A[i] = i+1;

    for(int i=0;i<32;i++){

      if(i<16)
        //Transfer two byte from A to B in first 16 rounds, 2 bytes/round
      else
       // transfer 1 byte from A to B in next 16 rounds, 1 byte/round
    }

    free(A);
    free(B);

我可以理解这可能是使用memcpy实现的,但我在执行地址计算时感到困惑。我不确定我是否采取了正确的方法。如果我在解释中足够清楚,请告诉我。任何帮助将非常感谢。谢谢。

1 个答案:

答案 0 :(得分:2)

您需要使用char*指针来访问缓冲区的各个字节,并使用uint16_t*来获取2字节块。

char *cA = (char *)A;
char *cB = (char *)B;

uint16_t *iA = (uint16_t *)A;
uint16_t *iB = (uint16_t *)B;

for(int i=0;i<32;i++){

    if(i<16) {
        //Transfer two byte from A to B in first 16 rounds, 2 bytes/round
        iB[i] = iA[i];
    }
    else {
        // transfer 1 byte from A to B in next 16 rounds, 1 byte/round
        cB[16 + i] = cA[16 + i];
    }
 }