假设我有这个字节
uint8_t k[8]= {0,0,0,1,1,1,0,0};
有没有办法让它成为一个整数或十六进制?
答案 0 :(得分: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开始循环,然后降到零。
如果字节代表各个位,则移1而不是8。
答案 1 :(得分: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;
}