如何复制内存

时间:2013-01-30 22:33:05

标签: c pointers

说我有:

unsigned char *varA, *varB, *varC;
varA=malloc(64);
varB=malloc(32);
varC=malloc(32);

如何将varA的第一个 32个字节放入varB,将varA的 last 32个字节放入varC?

3 个答案:

答案 0 :(得分:8)

memcpy(varB, varA, 32);
memcpy(varC, varA + 32, 32);

这很简单,因为底层数据类型是unsigned char,它与字节大小相同。如果varAvarBvarC是整数,则需要将size参数乘以memcpy(即32)sizeof(int)以计算右侧要复制的字节数。如果我是迂腐的话,我可以在上面的示例中将{32}乘以sizeof(unsigned char),但这不是必需的,因为sizeof(unsigned char) == 1.

请注意,我不需要将varA + 32中的32乘以任何东西,因为编译器在为指针添加常量偏移时为我做了这些。

还有一件事:如果你想要快速,只需分别处理varA的每一半,而不是分配两个新的缓冲区并复制到它们中就足够了。

答案 1 :(得分:0)

您可以使用循环逐个复制单个字节:

for (int i = 0; i != 32; ++i)
    varB[i] = varA[i];

for (int i = 0; i != 32; ++i)
    varC[i] = varA[32 + i];
来自C运行时库的

memcpy函数:

memcpy(varB, varA, 32);
memcpy(varC, varA + 32, 32);

答案 2 :(得分:-3)

好的,让我们这样做....

uint64 source;
uint32 upperBytes, lowerBytes;

upperBytes = source&0xFFFFFFFF00000000;
lowerBytes = source&0x00000000FFFFFFFF;

完成家庭作业。