我正在监听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/