如何从缓冲区中取出一个八位字节并将其转换为二进制序列?我想通过 node.js 解码协议rfc1035,但发现很难使用位。
这是一个代码,但它不适合我 - 因为它对我来说是一个黑匣子:
var sliceBits = function(b, off, len) {
  var s = 7 - (off + len - 1);
  b = b >>> s;
  return b & ~(0xff << len);
};
如何从缓冲区中取出一个八位字节并将其转换为二进制序列?我想通过 node.js 解码协议rfc1035,但发现很难使用位。
这是一个代码,但它不适合我 - 因为它对我来说是一个黑匣子:
var sliceBits = function(b, off, len) {
  var s = 7 - (off + len - 1);
  b = b >>> s;
  return b & ~(0xff << len);
};
使用位掩码,八位字节是 8 位,因此您可以执行以下操作:
for (var i = 7; i >= 0; i--) {
   var bit = octet & (1 << i) ? 1 : 0;
   // do something with the bit (push to an array if you want a sequence)
}
示例:http: //jsfiddle.net/3NUVq/
您可能可以提高效率,但方法非常简单。这会在 offset 上循环i,从 7 到 0,并i使用 bitmask 找到第 th 位1 << i。如果第ith 位被设置,则bit变为1,否则为0。