1

如何将字节数组的八个值附加uint8_t[8]到一个变量中uint64_t

 uint8_t array[8] = { 0xe4, 0x52, 0xcb, 0xbe, 0xa4, 0x63, 0x95, 0x8f };

 uint64_t result = 0;
 for(int i = 0; i < sizeof(array); ++i)
 {
     // what to do here?
 }

在上面的示例中,result应该以 value 结尾0xe452cbbea463958f。我正在寻找一个不完全绑定到数组中的八个元素的通用解决方案。

4

2 回答 2

3

如果您只想按顺序复制字节,最好的方法是使用 memcpy:

memcpy(&result, array, sizeof(array));

但是,如果您想将字节解释为更大数字的一部分,并将它们视为大端顺序,则必须使用 H2CO3 提供的循环:

result = 0;
for (int i=0; i<sizeof(array); i++) {
    result <<= 8;
    result |= array[i];
}

如果您希望能够使用与 64 位整数的字节数组相同的变量,您可以简单地进行类型转换。或者,如果您使用 C 语言编写,您可以使用联合。

union myBigInt {
    uint8_t asBytes[8];
    uint64_t asLongInt;
};
于 2013-08-31T20:25:18.090 回答
3

这是如何:

result <<= 8;
result |= array[i];

运算符的|=意思是“按位或后赋值”。Afterresult向左移动 8 个位置(做什么<<=),新字节被插入到它的末尾。

于 2013-08-31T20:27:31.343 回答