JavaScript: 以整数形式读取 3 个字节的 Buffer

JavaScript: reading 3 bytes Buffer as an integer

假设我有一个十六进制数据流,我想将其分成 3 个字节的块,我需要将其作为整数读取。

例如:给定一个十六进制字符串 01be638119704d4b9a 我需要读取前三个字节 01be63 并将其读取为整数 114275。这是我得到的:

var sample = '01be638119704d4b9a';
var buffer = new Buffer(sample, 'hex');
var bufferChunk = buffer.slice(0, 3);
var decimal = bufferChunk.readUInt32BE(0);

readUInt32BE 非常适合 4 字节数据,但在这里我显然得到:

RangeError: index out of range
  at checkOffset (buffer.js:494:11)
  at Buffer.readUInt32BE (buffer.js:568:5)

如何正确读取 3 个字节的整数?

如果您使用的是 node.js v0.12+ 或 io.js,buffer.readUIntBE() 允许可变字节数:

var decimal = buffer.readUIntBE(0, 3);

(请注意,Big Endian 为 readUIntBE,Little Endian 为 readUIntLE)。

否则,如果您使用的是旧版本的节点,则必须手动执行(当然首先检查边界):

var decimal = (buffer[0] << 16) + (buffer[1] << 8) + buffer[2];

您应该将三字节转换为四字节。

function three(var sample){
    var buffer = new Buffer(sample, 'hex');

    var buf = new Buffer(1);
    buf[0] = 0x0;

    return Buffer.concat([buf, buffer.slice(0, 3)]).readUInt32BE();
}

你可以试试这个功能

我正在用这个,如果有人知道有什么问题,请指教;

const integer = parseInt(buffer.toString("hex"), 16)