在C语言中,以字节为单位将数据从一个数组传输到另一个数组
所以我有两个动态分配的整数变量(A和B)。它们的大小都是12,每一个都有48个字节。我希望以字节为单位将数据从一个传输到另一个,并希望在32轮(循环)中完成传输。我将在下面描述我试图实现的目标:在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个字节
- 第1轮:数组A到数组B的前2个字节(字节1和字节2)
- 第2轮:从数组A到数组B的下2个字节(字节3和4)
- 第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*
。