JavaScript:读取3个字节Buffer作为整数

时间:2015-06-18 09:13:14

标签: javascript node.js buffer

假设我有一个十六进制数据流,我想把它分成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字节作为整数?

3 个答案:

答案 0 :(得分:31)

如果您使用的是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];

答案 1 :(得分:0)

我正在使用它,如果有人知道它有问题,请告知;

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

答案 2 :(得分:-4)

你应该将三个字节转换为四个字节。

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();
}

您可以尝试此功能。