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)
假设我有一个十六进制数据流,我想将其分成 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)