1

假设我有这个字节

uint8_t k[8]= {0,0,0,1,1,1,0,0}; 

有没有办法让它变成一个整数或十六进制?

4

2 回答 2

1

如果k表示 64 位整数的 8 个字节,则遍历 8 位整数数组,并将它们从左到右移动到结果中:

uint64_t res = 0;
for (int i = 0 ; i != 8 ; i++) {
    res <<= 8;
    res |= k[i];
}

循环的方向取决于原始字节int存储在k数组中的顺序。上面的片段显示了 MSB 到 LSB 的顺序;如果数组是 LSB 到 MSB,则从 7 开始循环,然后下降到零。

如果字节代表单个位,则移动一位而不是八位。

于 2013-01-24T02:16:08.457 回答
1

这应该可以解决问题:

int convertToInt(uint8_t k[8], bool leastSignificantFirst) { 
    int res = 0;
    for (int i = 0; i < 8; ++i) { 
        if (leastSignificantFirst) { 
            res |= (k[i] & 1) << (7 - i);
        } else {
            res |= (k[i] & 1) << i;
        }
    }
    return res;
}
于 2013-01-24T02:16:32.907 回答