gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:23:04 24 4
gpt4 key购买 nike

所以我有两个动态分配的整数变量(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);

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

最佳答案

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

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];
}
}

关于c - 在C中将数据以字节为单位从一个数组传输到另一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32513221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com