Node.js バッファーを16進数へ
Node.jsでraw Bufferデータを16進数文字列として表示する方法
Node.jsでは、バイナリデータの操作にBuffer
オブジェクトを使用します。このBuffer
オブジェクトは、生のバイナリデータの配列として扱われます。これらの生のバイナリデータを16進数文字列として表示する方法は、さまざまな場面で役立ちます。
方法1: toString('hex')
メソッドを使用する
最もシンプルな方法は、Buffer
オブジェクトのtoString('hex')
メソッドを使用することです。このメソッドは、Buffer
オブジェクトの内容を16進数文字列に変換して返します。
const Buffer = require('buffer').Buffer;
const myBuffer = Buffer.from('hello world');
const hexString = myBuffer.toString('hex');
console.log(hexString); // 出力: 68656c6c6f20776f726c64
方法2: buffer-to-hex
モジュールを使用する
より効率的な方法として、buffer-to-hex
などのサードパーティモジュールを使用することもできます。これらのモジュールは、最適化されたアルゴリズムを使用して、Buffer
オブジェクトを16進数文字列に変換します。
const bufferToHex = require('buffer-to-hex');
const myBuffer = Buffer.from('hello world');
const hexString = bufferToHex(myBuffer);
console.log(hexString); // 出力: 68656c6c6f20776f726c64
独自の関数を実装する
必要に応じて、独自の関数を実装することもできます。これは、特定の要件に合わせてカスタマイズしたい場合に便利です。
function bufferToHex(buffer) {
const hexChars = '0123456789abcdef';
let hexString = '';
for (let i = 0; i < buffer.length; i++) {
const byte = buffer[i];
hexString += hexChars.charAt((byte >> 4) & 0x0f) + hexChars.charAt(byte & 0x0f);
}
return hexString;
}
const myBuffer = Buffer.from('hello world');
const hexString = bufferToHex(myBuffer);
console.log(hexString); // 出力: 68656c6c6f20776f726c64
const Buffer = require('buffer').Buffer;
const myBuffer = Buffer.from('hello world');
const hexString = myBuffer.toString('hex');
console.log(hexString); // 出力: 68656c6c6f20776f726c64
console.log(hexString)
:hexString
変数の内容を出力します。myBuffer.toString('hex')
:myBuffer
オブジェクトの内容を16進数文字列に変換し、その結果をhexString
変数に格納します。Buffer.from('hello world')
: 文字列 "hello world" をBuffer
オブジェクトに変換します。
const bufferToHex = require('buffer-to-hex');
const myBuffer = Buffer.from('hello world');
const hexString = bufferToHex(myBuffer);
console.log(hexString); // 出力: 68656c6c6f20776f726c64
bufferToHex(myBuffer)
:buffer-to-hex
モジュールのbufferToHex
関数を呼び出し、myBuffer
オブジェクトを16進数文字列に変換します。require('buffer-to-hex')
:buffer-to-hex
モジュールをインポートします。
function bufferToHex(buffer) {
const hexChars = '0123456789abcdef';
let hexString = '';
for (let i = 0; i < buffer.length; i++) {
const byte = buffer[i];
hexString += hexChars.charAt((byte >> 4) & 0x0f) + hexChars.charAt(byte & 0x0f);
}
return hexString;
}
const myBuffer = Buffer.from('hello world');
const hexString = bufferToHex(myBuffer);
console.log(hexString); // 出力: 68656c6c6f20776f726c64
for
ループ:Buffer
オブジェクトの各バイトを処理し、16進数文字に変換してhexString
に追加します。hexString
: 16進数文字列を格納する変数。hexChars
: 16進数の文字を格納する文字列。bufferToHex
関数: 独自の関数を実装し、Buffer
オブジェクトを16進数文字列に変換します。
crypto.createHashメソッドを使用する
crypto.createHash
メソッドを使用して、Buffer
オブジェクトのハッシュ値を計算し、そのハッシュ値を16進数文字列として取得することができます。
const crypto = require('crypto');
const myBuffer = Buffer.from('hello world');
const hash = crypto.createHash('sha256').update(myBuffer).digest('hex');
console.log(hash); // 出力: 7740410000000000000000000000000000000000000000000000000000000000
この方法では、Buffer
オブジェクトのハッシュ値が計算されるため、元のデータの復元はできません。
buffer-to-hexモジュールのカスタムオプションを使用する
buffer-to-hex
モジュールは、さまざまなオプションを提供しており、これらのオプションを使用して、16進数文字列の出力形式をカスタマイズすることができます。
const bufferToHex = require('buffer-to-hex');
const myBuffer = Buffer.from('hello world');
const hexString = bufferToHex(myBuffer, { separator: ':', uppercase: true });
console.log(hexString); // 出力: 68:65:6C:6C:6F:20:77:6F:72:6C:64
この例では、16進数文字列の間にコロン(:
)を挿入し、大文字で出力しています。
Array.prototype.mapメソッドを使用する
Buffer
オブジェクトは、配列のように扱えるため、Array.prototype.map
メソッドを使用して、各バイトを16進数文字に変換することができます。
const myBuffer = Buffer.from('hello world');
const hexString = myBuffer.map(byte => byte.toString(16).padStart(2, '0')).join('');
console.log(hexString); // 出力: 68656c6c6f20776f726c64
node.js buffer