JavaScriptで整数 ⇄ バイト列に相互変換
#JavaScript #WebブラウザのJavaScript #Node.js
ここでいうバイト列はビッグエンディアンの4バイト。
4バイトなので表現できる整数値は0 ~ 4294967295。
整数 → バイト列 (4バイト)
code:js
function uint32ToArrayBuffer(n) {
const view = new DataView(new ArrayBuffer(4));
view.setUint32(0, n, false);
return view.buffer;
}
参考: Convert a 32bit integer into 4 bytes of data in javascript - Stack Overflow
setUint32(_, _, false)のfalseはリトルエンディアンならtrueのフラグ。
引数はnumber
戻り値はArrayBuffer
使用例
code:js
const buf = uint32ToArrayBuffer(692);
...new Uint8Array(buf)
// => 0,0,2,180
バイト列 (4バイト) → 整数 (ブラウザとNode.js)
code:js
function arrayBufferToUint32(buf) {
return new DataView(buf).getUint32(0, false);
}
引数はArrayBuffer
戻り値はnumber
使用例
code:js
const buf = uint32ToArrayBuffer(692);
arrayBufferToUint32(buf);
// => 692
おまけ: Nipp
以下のNippの入力欄に数値を入力すると相互変換して同じ値が出力されるべき。4バイトなので最大値は4294967295。
https://nipp.nwtgck.org/#/es2017/dY8xb8IwEIV3/4qTujgtxXEIJBA6UHWp1BG6VAx2YpdU1Eax3VIB/722iaBLPVi6e9/duyedqm2rFbhW2VG21IuuYz+PTkrRYZXAAQHUWhkL3El4ACW+4S+SJ9WF+Gq9eEaemGWvvsR+KhJBGxphV9EGpwNQA5Bsa0SUO2Fdp4JHhU4IEQKYMyNmsLF2Z2aEvLd24/iw1p/E22pjCI8HEL7VnHBaZOOCNoKxsuQiGzW5HHM5lUxwmUveFLWgRT4lrWrEfvhhbl4oLfP78BcJkk7VttUK2DXZUvenhgRwuIT0SJ8x6OUiTFxS9jGwh97SNdxCuqdpfAncAY59uob5HOgkgeMZzGKjDHUoR2u/6oTQ2U55sx3rjHhWFpsBUL/peITJNKt6wnt7xsVjl3pxTYCVX/RfouoX
おまけ: バイト列 (4バイト) → 整数 (Node.js限定Buffer版)
Buffer.fromはNode.jsで使える。
code:js
function arrayBufferToUint32(buf) {
const buffer = Buffer.from(buf);
return buffer.readUInt32BE();
}
参考: type conversion - Convert Uint8Array n into integer in node.js - Stack Overflow