【发布时间】:2016-06-06 11:03:56
【问题描述】:
我从内存中读取了一个 6 字节的 unsigned char 数组。
这里的字节序是大字节序。
现在我想将存储在数组中的值分配给一个整数变量。我认为这必须是 long long,因为它必须包含最多 6 个字节。
目前我是这样分配的:
unsigned char aFoo[6];
long long nBar;
// read values to aFoo[]...
// aFoo[0]: 0x00
// aFoo[1]: 0x00
// aFoo[2]: 0x00
// aFoo[3]: 0x00
// aFoo[4]: 0x26
// aFoo[5]: 0x8e
nBar = (aFoo[0] << 64) + (aFoo[1] << 32) +(aFoo[2] << 24) + (aFoo[3] << 16) + (aFoo[4] << 8) + (aFoo[5]);
memcpy 方法会很简洁,但是当我这样做时
memcpy(&nBar, &aFoo, 6);
这 6 个字节从一开始就被复制到 long long,因此在结尾处填充零。
有没有比我的换班任务更好的方法?
【问题讨论】:
-
试试 | (or) 而不是 + (plus) 并且不要忘记将 aFoo[0] 转换为 64 位值,因为这些操作默认情况下发生在 C 中的 32 位值上
-
(aFoo[0] << 64)是错字吗?我觉得应该是(aFoo[0] << 40) -
(aFoo[0] << 64) == 0在 64 位整数上。应该是(aFoo[0] << 40)。 -
memcpy 然后位移
long long是我会做的。 -
你的班次看起来不对,例如不应该是
aFoo[0] << 40,而不是aFoo[0] << 64吗?
标签: c long-integer memcpy