我正在侦听tcp套接字上的数据事件。
每个数据事件都为我提供了一个缓冲区,它是协议的一个框架。 第一个字节用作标头,包含我想要访问的一些位标志。
直到监听数据事件并将第一个字节看作:
socket.on('data', function(buff) {
console.log(buff[0]); // returns 129
});
如果我现在要检查第一位,那么我必须将129转换为位格式,然后检查第一个数字。
129 => 1000 0001
|
我们知道JavaScript不支持二进制文件。
我现在想知道节点缓冲区对象是否允许我按位工作,如果是,这将是什么样的?
此致
答案 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