2

说我有:

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

如何将 varA 的32 个字节放入 varB,将 varA 的最后32 个字节放入 varC?

4

3 回答 3

10
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。

请注意,我不需要将 32 乘以varA + 32任何值,因为编译器在向指针添加常量偏移量时会为我执行此操作。

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

于 2013-01-30T22:35:41.430 回答
1

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

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

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

或者memcpy来自 C 运行时库的函数:

memcpy(varB, varA, 32);
memcpy(varC, varA + 32, 32);
于 2013-01-30T22:39:44.857 回答
-3

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

uint64 source;
uint32 upperBytes, lowerBytes;

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

功课做完了。

于 2013-01-30T22:39:58.477 回答