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 位,这样 4-6 位就会移到 0-2 位。然后只屏蔽最后三位(二进制 111 = 十进制 7)。

于 2011-12-31T11:51:50.473 回答