1

私がこのバイトを持っているとしましょう

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

これを単一の整数または16進にする方法はありますか?

4

2 に答える 2

1

が 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 ずつシフトします。

于 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 に答える