2

私はいくつかのバイナリファイルの解析に取り組んでいます、私はそれらを開いて、にしていArrayBufferます。

私が読んでいる特定のファイル構造には、いくつかのビットがありboolean、それらがチェックされているかどうかを確認できます。

(flag & 1) != 0; // bit 0 
(flag & 2) != 0; // bit 1 
(flag & 4) != 0; // bit 2 

ただし、ビットの値を追跡するのに問題があります。それらは複数のビット(たとえば、ビット4〜6)にまたがり、0〜7の整数値で構成されます。

複数のビットはどのようにそのように読み取られますか?これは、ビットおよびビット演算子がどのように機能するかという問題ほどJavaScriptの問題ではないことを理解しています。

4

2 に答える 2

4

このようなバイトから4〜6ビットが必要だと仮定します。

76543210
 ^^^

次のようなビットマスクを作成します。

0x70

つまり:

01110000

そして、あなたはその数でそれを行い、右に4回シフトします:

( byte & 0x70 ) >> 4
//Number between 0-7
于 2011-12-31T11:55:11.517 に答える
2

最下位ビットが位置「0」にあり、ビット位置4〜6の間に3ビット整数が必要であると想定します。

var value = (flag >>> 4) & 0x0007;

言い換えると、ビット4〜6が位置0〜2にシフトされるように、4ビットを右に右シフト「フラグ」します。次に、最後の3ビットだけをマスクします(2進数の111 = 10進数の7)。

于 2011-12-31T11:51:50.473 に答える