如何在C ++中附加字节数据?

时间:2013-08-31 20:14:02

标签: c++ integer hex byte bytearray

如何将字节数组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应该以值0xe452cbbea463958f结尾。我正在寻找一个通用解决方案,它不受数组中八个元素的约束。

2 个答案:

答案 0 :(得分: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;
};

答案 1 :(得分:3)

这是:

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

|=运算符表示“按位OR后赋值”。在result向左移动8个位置(<<=执行的操作)后,新字节将插入到其末尾。