16進データストリームがあり、これを3バイトブロックに分割し、整数として読み取る必要があるとします。
たとえば、16進文字列01be638119704d4b9a
最初の3バイトを読む必要があります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);
(ビッグエンディアンの場合はreadUIntBE
、リトルエンディアンの場合はreadUIntLE
です)。
それ以外の場合、古いバージョンのノードを使用している場合は、手動で行う必要があります(もちろん最初に境界を確認してください):
var decimal = (buffer[0] << 16) + (buffer[1] << 8) + buffer[2];
私はこれを使用しています。誰かが何か間違ったことを知っている場合は、アドバイスしてください。
const integer = parseInt(buffer.toString("hex"), 16)