私がこのバイトを持っているとしましょう
uint8_t k[8]= {0,0,0,1,1,1,0,0};
これを単一の整数または16進にする方法はありますか?
私がこのバイトを持っているとしましょう
uint8_t k[8]= {0,0,0,1,1,1,0,0};
これを単一の整数または16進にする方法はありますか?
が 64 ビット整数の 8 バイトを表す場合k
、8 ビット整数の配列を調べて、結果に左から右にシフトします。
uint64_t res = 0;
for (int i = 0 ; i != 8 ; i++) {
res <<= 8;
res |= k[i];
}
ループの方向は、元のバイトが配列int
に格納されている順序によって異なります。k
上記のスニペットは、MSB から LSB への順序を示しています。配列が LSB-to-MSB の場合、7 でループを開始し、ゼロまで下がります。
バイトが個々のビットを表す場合は、8 ではなく 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;
}