说我有:
unsigned char *varA, *varB, *varC;
varA=malloc(64);
varB=malloc(32);
varC=malloc(32);
如何将varA的第一个 32个字节放入varB,将varA的 last 32个字节放入varC?
答案 0 :(得分:8)
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.
请注意,我不需要将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;
完成家庭作业。