JavaScript:将3字节缓冲区读取为整数

JavaScript:将3字节缓冲区读取为整数,javascript,node.js,buffer,Javascript,Node.js,Buffer,假设我有一个十六进制数据流,我想把它分成3个字节的块,我需要把它读成一个整数 例如:给定一个十六进制字符串01be638119704db9a我需要读取前三个字节01be63,并将其读取为整数114275。这就是我得到的: var sample = '01be638119704d4b9a'; var buffer = new Buffer(sample, 'hex'); var bufferChunk = buffer.slice(0, 3); var decimal = bufferChunk.

假设我有一个十六进制数据流,我想把它分成3个字节的块,我需要把它读成一个整数

例如:给定一个十六进制字符串
01be638119704db9a
我需要读取前三个字节
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,则存在允许可变字节数的:

var decimal = buffer.readUIntBE(0, 3);
(请注意,对于大端,它是
readUIntBE
,对于小端,它是
readUIntLE

否则,如果您使用的是较旧版本的node,则必须手动执行此操作(当然,首先要检查边界):


var decimal=(缓冲区[0]您应该将三字节转换为四字节

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)

谢谢!一定错过了
readUIntBE
函数。它工作得很好。为了节省几微秒:var decimal=((缓冲区[0]小尾端变量:(字节[2]这对我来说很好。我只想让文本类别从固定的颜色调色板中半随机地分配一个颜色编号。很好!@JoshPeak
const integer = parseInt(buffer.toString("hex"), 16)