Nodejs Buffer:如何读出位标志?

时间:2013-01-06 12:23:52

标签: javascript node.js sockets binary buffer

我正在侦听tcp套接字上的数据事件。

每个数据事件都为我提供了一个缓冲区,它是协议的一个框架。 第一个字节用作标头,包含我想要访问的一些位标志。

直到监听数据事件并将第一个字节看作:

socket.on('data', function(buff) {
    console.log(buff[0]); // returns 129
});

如果我现在要检查第一位,那么我必须将129转换为位格式,然后检查第一个数字。

129 => 1000 0001
       |

我们知道JavaScript不支持二进制文件。

我现在想知道节点缓冲区对象是否允许我按位工作,如果是,这将是什么样的?

此致

1 个答案:

答案 0 :(得分:4)

可以使用&运算符检查标记。

对于包含第一位的标志:

1000 0001      129
1000 0000      128
--------- &
1000 0000      128

对于不包含第一位的标志:

0101 0001      81
1000 0000      128
--------- &
0000 0000      0

因此结果是标志(如果标志已设置)或零(如果标志尚未设置)。因此,您可以创建一个函数(其中flag是2的幂):

var containsFlag = function(number, flag) {
  return (number & flag) === flag;
};

containsFlag(129, 128);  // true
containsFlag(81, 128);   // false