情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsのバッファで数値を扱う

バッファで数値を扱うために幾つかの関数が提供されています。

数値の書き込み

種類に応じてバッファに数値を書き込むには下のような関数を使用します。

  • buf.writeDoubleBE・・・64ビットの浮動小数点数をビッグエンディアンで書き込みます。
  • buf.writeDoubleLE・・・64ビットの浮動小数点数をリトルエンディアンで書き込みます。
  • buf.writeFloatBE・・・32ビットの浮動小数点数をビッグエンディアンで書き込みます。
  • buf.writeFloatLE・・・32ビットの浮動小数点数をリトルエンディアンで書き込みます。
  • buf.writeInt8・・・8ビットの符号付き整数を書き込みます。
  • buf.writeInt16BE・・・16ビットの符号付き整数をビッグエンディアンで書き込みます。
  • buf.writeInt16LE・・・16ビットの符号付き整数をリトルエンディアンで書き込みます。
  • buf.writeInt32BE・・・32ビットの符号付き整数をビッグエンディアンで書き込みます。
  • buf.writeInt32LE・・・32ビットの符号付き整数をリトルエンディアンで書き込みます。
  • buf.writeUInt8・・・8ビットの符号なし整数を書き込みます。
  • buf.writeUInt16BE・・・16ビットの符号なし整数をビッグエンディアンで書き込みます。
  • buf.writeUInt16LE・・・16ビットの符号なし整数をリトルエンディアンで書き込みます。
  • buf.writeUInt32BE・・・32ビットの符号なし整数をビッグエンディアンで書き込みます。
  • buf.writeUInt32LE・・・32ビットの符号なし整数をリトルエンディアンで書き込みます。
var index = buf.writeDoubleBE(3.14, 0, false);

第1引数に数値を指定します。

第2引数に書き込みの開始インデックスを指定します。

第3引数に引数のエラーチェックを行わないかを真偽値として指定します。この引数は指定しなくても構いません。デフォルトはfalseです。この引数がfalseの場合には第1引数の数値と第2引数の開始インデックスの範囲チェックが行われ、チェックに通らなかった場合にはエラーが発生します。trueの場合には引数のエラーチェックは行われません。そのため、数値か開始インデックスが範囲外の場合にはエラーは発生しませんが、数値が意図通りにバッファに書き込まれない可能性があります。

返り値として書き込みの終了インデックスが得られます。

整数の書き込み

種類に応じてバッファに整数を書き込むには下のような関数を使用します。

  • buf.writeIntBE・・・符号付き整数をビッグエンディアンで書き込みます。
  • buf.writeIntLE・・・符号付き整数をリトルエンディアンで書き込みます。
  • buf.writeUIntBE・・・符号なし整数をビッグエンディアンで書き込みます。
  • buf.writeUIntLE・・・符号なし整数をリトルエンディアンで書き込みます。
var index = buf.writeIntBE(3, 0, 1, false);

第1引数に整数を指定します。

第2引数に書き込みの開始インデックスを指定します。

第3引数に整数の長さをバイト単位で指定します。1から6までの値でなければなりません。

第4引数に引数のエラーチェックを行わないかを真偽値として指定します。この引数は指定しなくても構いません。デフォルトはfalseです。この引数がfalseの場合には第1引数の整数と第2引数の開始インデックスの範囲チェックが行われ、チェックに通らなかった場合にはエラーが発生します。trueの場合には引数のエラーチェックは行われません。そのため、整数か開始インデックスが範囲外の場合にはエラーは発生しませんが、整数が意図通りにバッファに書き込まれない可能性があります。

返り値として書き込みの終了インデックスが得られます。

数値の読み込み

種類に応じてバッファから数値を読み込むには下のような関数を使用します。

  • buf.readDoubleBE・・・64ビットの浮動小数点数をビッグエンディアンで読み込みます。
  • buf.readDoubleLE・・・64ビットの浮動小数点数をリトルエンディアンで読み込みます。
  • buf.readFloatBE・・・32ビットの浮動小数点数をビッグエンディアンで読み込みます。
  • buf.readFloatLE・・・32ビットの浮動小数点数をリトルエンディアンで読み込みます。
  • buf.readInt8・・・8ビットの符号付き整数を読み込みます。
  • buf.readInt16BE・・・16ビットの符号付き整数をビッグエンディアンで読み込みます。
  • buf.readInt16LE・・・16ビットの符号付き整数をリトルエンディアンで読み込みます。
  • buf.readInt32BE・・・32ビットの符号付き整数をビッグエンディアンで読み込みます。
  • buf.readInt32LE・・・32ビットの符号付き整数をリトルエンディアンで読み込みます。
  • buf.readUInt8・・・8ビットの符号なし整数を読み込みます。
  • buf.readUInt16BE・・・16ビットの符号なし整数をビッグエンディアンで読み込みます。
  • buf.readUInt16LE・・・16ビットの符号なし整数をリトルエンディアンで読み込みます。
  • buf.readUInt32BE・・・32ビットの符号なし整数をビッグエンディアンで読み込みます。
  • buf.readUInt32LE・・・32ビットの符号なし整数をリトルエンディアンで読み込みます。
var number = buf.readDoubleBE(0, false);

第1引数に読み込みの開始インデックスを指定します。

第2引数に引数のエラーチェックを行わないかを真偽値として指定します。この引数は指定しなくても構いません。デフォルトはfalseです。この引数がfalseの場合には第1引数の開始インデックスの範囲チェックが行われ、チェックに通らなかった場合にはエラーが発生します。trueの場合には引数のエラーチェックは行われません。そのため、開始インデックスが範囲外の場合にはエラーは発生しませんが、数値が意図通りにバッファから読み込まれない可能性があります。

返り値として数値が得られます。

整数の読み込み

種類に応じてバッファから整数を読み込むには下のような関数を使用します。

  • buf.readIntBE・・・符号付き整数をビッグエンディアンで読み込みます。
  • buf.readIntLE・・・符号付き整数をリトルエンディアンで読み込みます。
  • buf.readUIntBE・・・符号なし整数をビッグエンディアンで読み込みます。
  • buf.readUIntLE・・・符号なし整数をリトルエンディアンで読み込みます。
var integer = buf.readIntBE(0, 1, false);

第1引数に読み込みの開始インデックスを指定します。

第2引数に整数の長さをバイト単位で指定します。1から6までの値でなければなりません。

第3引数に引数のエラーチェックを行わないかを真偽値として指定します。この引数は指定しなくても構いません。デフォルトはfalseです。この引数がfalseの場合には第1引数の開始インデックスの範囲チェックが行われ、チェックに通らなかった場合にはエラーが発生します。trueの場合には引数のエラーチェックは行われません。そのため、開始インデックスが範囲外の場合にはエラーは発生しませんが、整数が意図通りにバッファから読み込まれない可能性があります。

返り値として整数が得られます。

サンプルコード1

buffer-number.js

var buf1 = Buffer.from([0, 1, 2, 3, 4, 5, 6, 7]);

console.log(buf1.readDoubleBE(0));
console.log(buf1.readDoubleLE(0));
console.log(buf1.readFloatBE(0));
console.log(buf1.readFloatLE(0));
console.log(buf1.readInt8(0));
console.log(buf1.readInt8(1));
console.log(buf1.readIntBE(0, 1));
console.log(buf1.readIntLE(1, 1));
console.log(buf1.readInt16BE(0));
console.log(buf1.readIntBE(0, 2));
console.log(buf1.readInt16BE(2));
console.log(buf1.readIntBE(2, 2));
console.log(buf1.readInt16LE(0));
console.log(buf1.readInt16LE(2));
console.log(buf1.readInt32BE(0));
console.log(buf1.readInt32BE(4));
console.log(buf1.readInt32LE(0));
console.log(buf1.readInt32LE(4));
console.log(buf1.readUInt8(0));
console.log(buf1.readUInt8(1));
console.log(buf1.readUIntBE(0, 1));
console.log(buf1.readUIntLE(1, 1));
console.log(buf1.readUInt16BE(0));
console.log(buf1.readUIntBE(0, 2));
console.log(buf1.readUInt16BE(2));
console.log(buf1.readUIntBE(2, 2));
console.log(buf1.readUInt16LE(0));
console.log(buf1.readUInt16LE(2));
console.log(buf1.readUInt32BE(0));
console.log(buf1.readUInt32BE(4));
console.log(buf1.readUInt32LE(0));
console.log(buf1.readUInt32LE(4));

buf1.writeInt8(-3, 0);
buf1.writeUInt8(3, 1);

console.log(buf1);

buf1.writeInt16BE(-3, 0);
buf1.writeInt16LE(-3, 2);
buf1.writeUInt16BE(3, 4);
buf1.writeUInt16LE(3, 6);

console.log(buf1);

実行結果

C:\work\node>node buffer-number.js
1.40159977307889e-309
7.949928895127363e-275
9.25571648671185e-41
3.820471434542632e-37
0
1
0
1
1
1
515
515
256
770
66051
67438087
50462976
117835012
0
1
0
1
1
1
515
515
256
770
66051
67438087
50462976
117835012
<Buffer fd 03 02 03 04 05 06 07>
<Buffer ff fd fd ff 00 03 03 00>

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js