2026-01-11
#js 
バイナリデータのフォーマットを新たに作る際、数に何ビット使うか悩みますよね。

そこで、可変長バイナリフォーマット、Varuint!(参考、Variable-length quantityLEB128


「Varuint」

可変(variable)、符号なし(unsigned)、整数(int)なので、var u int。下記のように使います。

import { Varuint } from "https://code4fukui.github.io/Varuint/Varuint.js"; const bin = Varuint.encode(300); console.log(bin); // Uint8Array(2) [172, 2] const n = Varuint.decode(bin); console.log(n); // 300 const len = Varuint.length(n); console.log(len); // 2

0-127であれば1byte、128-16,383であれば2byte、16,384-2,097,151であれば3byteで表現できます。

BigIntに対応しています。

const len = Varuint.length(100000000000000000000n); console.log(len); // 10

1垓(=10の20乗)は、10byteで表せる!

クリエイティブ・コモンズ・ライセンス
本ブログの記事や写真は「Creative Commons — CC BY 4.0」の下に提供します。記事内で紹介するプログラムや作品は、それぞれに記載されたライセンスを参照ください。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / 「一日一創」画像 / RSS