Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C语言中,以字节为单位将数据从一个数组传输到另一个数组_C_Arrays - Fatal编程技术网

在C语言中,以字节为单位将数据从一个数组传输到另一个数组

在C语言中,以字节为单位将数据从一个数组传输到另一个数组,c,arrays,C,Arrays,所以我有两个动态分配的整数变量(A和B)。它们的大小都是12,每一个都有48个字节。我希望以字节为单位将数据从一个传输到另一个,并希望在32轮(循环)中完成传输。我将在下面描述我试图实现的目标: 第1轮:数组A到数组B的前2个字节(字节1和字节2) 第2轮:从数组A到数组B的下2个字节(字节3和4) 继续传输2个字节,直到第16轮。在第16轮中,将传输第31和32个字节 那么从第17轮到第32轮的传输速率将是1字节/轮,即 第17轮:从A到B的第33个字节 第18轮:从A到B的第34个字节

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

  • 第1轮:数组A到数组B的前2个字节(字节1和字节2)
  • 第2轮:从数组A到数组B的下2个字节(字节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);
int*A、*B;
A=(int*)malloc(12*sizeof(int));
B=(int*)malloc(12*sizeof(int));

对于(int i=0;i您需要使用
char*
指针来访问缓冲区的各个字节,对于2字节块则需要使用
uint16*

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];
    }
 }
char*cA=(char*)A;
char*cB=(char*)B;
uint16_t*iA=(uint16_t*)A;
uint16_t*iB=(uint16_t*)B;

对于(int i=0;i所有这些数据混叠的目的是什么?一般来说,你能做的任何避免复制数据的事情都是好的。实际上,我需要它是为了一个不同的目的,这要解释得更复杂一些。但这是我最终需要的基本版本。因此,显然这听起来有点奇怪,但这是一种测试程序我正在编写ram,并将在其他地方实现此技术。感谢您的建议。但实际数据将以int、float或double的形式提供给我。因此,我无法处理char*请不要在C中转换
malloc
&friends!
A
B
的结果!它们不是整数变量,而是指针对于
int
,分别指向12个
int
s数组的指针。我可以理解,这可以使用char*完成,但我想知道是否有一个过程可以使用int*执行此操作?您必须将
int*
转换为
char*
才能访问单个字节,因此本质上是一样的。您可以访问 int
然后使用位移位和掩蔽,但这更复杂。我想知道还有一件事可以做。在if语句中,两个字节的副本是否可以在一个步骤中完成,而不是在不使用memcpy的情况下在两个单独的步骤中完成。我已经更新了答案,在前16个步骤中使用
uint16\u t*