1

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

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

直到那里监听数据事件并获得第一个字节看起来像:

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

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

129 => 1000 0001
       |

正如我们所知,JavaScript 不支持二进制文件。

我现在想知道节点缓冲区对象是否允许我明智地工作,如果是的话,这会是什么样子?

问候

4

1 回答 1

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
于 2013-01-06T12:31:46.297 回答