DevToys Web Pro iconDevToys Web Proブログ
評価:
ブラウザ拡張機能を試す:

VarInt エンコーダー / デコーダー

12 バイト
モード

10進数の値

  • VarInt 出力

  • 技術的な詳細

    VarIntエンコーダー/デコーダーの仕組み

    このツールでできること

    VarIntツールは、符号なし整数をProtobufスタイルのLEB128可変長整数としてエンコードし、バイナリのVarIntストリームを整数リストへデコードします。各値は大きさに応じて1〜10バイトでエンコードされ、各バイトの最上位ビットが後続バイトの有無を示します。出力は、バイト配列、16進数、またはBase64として表示され、テストやフィクスチャに埋め込みやすくなっています。

    開発者によくある利用シーン

    Protobufのワイヤーフォーマットのペイロードをデバッグするエンジニアは、VarIntのエンコード/デコードを使って、完全なProtobufランタイムを立ち上げることなくフィールドタグや符号なし整数フィールド値を確認します。Bitcoinなどの暗号通貨開発者は、VarIntでエンコードされたスクリプト長やトランザクション数を解析します。このツールは、小さな数に対してコンパクトであることからLEB128を採用するカスタムバイナリプロトコルをリバースエンジニアリングする際にも役立ちます。

    データ形式、型、またはバリエーション

    LEB128(Little-Endian Base 128)は、1バイトあたり7ビットのペイロードを出力し、最上位ビットを継続フラグとして使用します。小さな数(0〜127)は1バイト、16,383までの数は2バイト、という具合です。入力は、空白、カンマ、または改行で区切られた10進数を受け付けます。出力は16進数、Base64、そして生のバイト配列表記で利用できます。符号付き整数は、まずZigZag変換 (n << 1) ^ (n >> 31) を適用してからエンコードできます。

    よくある落とし穴とエッジケース

    JavaScriptの数値精度は2^53 − 1が上限であり、Number.MAX_SAFE_INTEGERを超える値は安全にエンコードできません。途中で切れたVarIntストリーム(終端バイトが欠落)は部分的にデコードされ、オフセットを示すエラーが返ります。負の数は直接エンコードできないため、先にZigZagエンコーディングを使用してください。Base64のパディングが削除されている可能性があるスクリーンショットからVarIntバイトをコピーするのは避けてください。パディング欠落によりバイト境界が変わります。

    コードではなくこのツールを使うべき場面

    デバッグ中やテスト作成中にProtobufのワイヤーバイトを素早く確認するには、このブラウザツールを使ってください。本番のエンコードには、言語ネイティブのVarIntライブラリ(npmの`varint`、Goのencoding/binaryの`binary.varint`、Pythonのgoogle.protobuf.internalの`decode_varint`)を使用してください。これらはストリーミング、エラー回復、ZigZag変換を1回の呼び出しで処理します。