2

長さ 64 のバイト配列があります。このバイト配列のデータが何に対応するかの連続したリストがあります。このリストは、各値のビット単位のサイズを示しています。ほとんどの値は 8 ビットまたは 16 ビットで、簡単に解析できます。ただし、リストの途中で、12 ビットまたは 5 ビットの長さを取得し始めます。これらをループして必要なビットを引き出す最良の方法は何ですか。

4

1 に答える 1

1

次のコードは、 として格納されているデータ バッファーからnビットを抽出する必要がありuint[]ます。私はそれをテストしていないので、注意してください。

uint GetBits(uint[] data, ref uint pos, uint n) {
    uint a = pos/32;
    uint off = pos%32;
    uint mask = (1 << n) - 1;
    pos += n;
    return (data[a] << off)&mask | (data[a + 1] >> (32 - off))&mask;
}

リトル エンディアンのストレージを想定しているため、アラインされていない値が 1 つのワードの上位ビットから次の下位ビットに流れ込むことに注意してください。

于 2012-04-08T04:19:54.943 に答える