我正在监听TCP套接字上的数据事件。

每个数据事件都为我提供一个缓冲区,该缓冲区是协议(protocol)的帧。
第一个字节用作标题,并包含一些我想访问的位标志。

在此之前,监听数据事件并获取第一个字节的过程如下:

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

如果现在我要检查第一位,则必须将129转换为位格式,然后 checkout 第一位数字。
129 => 1000 0001
       |

众所周知,JavaScript不支持二进制文件。

我现在想知道节点缓冲区对象是否允许我按位工作,如果可以,它的外观如何?

问候

最佳答案

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

对于确实包含第一位的标志:

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

关于javascript - Node.js缓冲区: How to read out bit flags?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14182052/

10-11 23:07
查看更多