NodeJS缓冲区从字节读取位

时间:2014-07-07 17:08:19

标签: node.js binary

我有以下示例缓冲区并尝试从中提取一些数据。

<Buffer 38 31 aa 5e>
<Buffer 1c b2 4e 5f>
<Buffer c4 c0 28 60>
<Buffer 04 7a 52 60>
<Buffer 14 17 cd 60>

数据格式为

字节1 - UTC纳秒LS字节

字节2 - UTC纳秒

字节3 - UTC纳秒

字节4 - 位0-5 UTC纳秒高6位,6-7个原始位用于调试

当我需要整个字节时,我得到了位移,但是从来不需要将它与字节的位连接起来。有什么帮助吗?

2 个答案:

答案 0 :(得分:6)

您应该能够将值作为单个int读取,然后使用bitwise math来提取值。

// Read the value as little-endian since the least significant bytes are first.
var val = buf.readUInt32LE(0);

// Mask the last 2 bits out of the 32-bit value.
var nanoseconds = val & 0x3FFFFFFF;

// Mark just the final bits and convert to a boolean.
var bit6Set = !!(val & 0x40000000);
var bit7Set = !!(val & 0x80000000);

答案 1 :(得分:1)

我已经看到了更好的解决方案,所以我想分享一下:

_getNode(bitIndex: number, id: Buffer) {
  const byte   = ~~(bitIndex / 8); // which byte to look at
  const bit    = bitIndex % 8;     // which bit within the byte to look at
  const idByte = id[byte];         // grab the byte from the buffer
  if (idByte & Math.pow(2, (7 - bit))) { do something here } // check that the bit is set
}

它更清晰/更简洁。请注意我们如何使用自然log2模式来检查该位是否已设置。