JavaScript:以整数forms读取3个字节的缓冲区

比方说,我有一个hex数据stream,我想分成3个字节的块,我需要读取作为一个整数。

例如:给定一个hexstring01be638119704d4b9a我需要读取前三个字节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); 

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

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

你可以试试这个function。