说我有:
unsigned char *varA, *varB, *varC;
varA=malloc(64);
varB=malloc(32);
varC=malloc(32);
如何将 varA 的前32 个字节放入 varB,将 varA 的最后32 个字节放入 varC?
memcpy(varB, varA, 32);
memcpy(varC, varA + 32, 32);
之所以这么简单,是因为底层数据类型是unsigned char
,它的大小与一个字节相同。如果varA
、varB
和varC
是整数,则需要将 size 参数乘以memcpy
(即 32)sizeof(int)
以计算要复制的正确字节数。如果我是迂腐的,我可以在上面的例子中乘以 32 sizeof(unsigned char)
,但这没有必要,因为sizeof(unsigned char)
== 1。
请注意,我不需要将 32 乘以varA + 32
任何值,因为编译器在向指针添加常量偏移量时会为我执行此操作。
还有一件事:如果你想快点,varA
单独处理每一半就足够了,而不是分配两个新的缓冲区并复制到它们中。
您可以使用循环来一一复制单个字节:
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);
好吧,让我们这样做......
uint64 source;
uint32 upperBytes, lowerBytes;
upperBytes = source&0xFFFFFFFF00000000;
lowerBytes = source&0x00000000FFFFFFFF;
功课做完了。