LEB128 Varintデコーダー
この符号なしLEB128デコーダーは、可変長のバイト列を正確な整数値へ変換します。E5 8E 26のような16進バイトを貼り付けるか、解析元が通常のバイト番号を示す場合は10進表記を選択してください。各バイトの継続ビットを追跡し、列が正しく終了しているか検証したうえで、正規化したバイトと10進結果を返します。WebAssemblyバイナリ、Protocol Buffersのペイロード、DWARFデバッグ情報、各種のコンパクト形式を調査する際に役立ちます。
無料で実行
符号なしLEB128が整数を格納する仕組み
LEB128は、整数を基数128のリトルエンディアン順で表す方式です。各バイトは7ビットのデータを持ち、最上位ビットは継続フラグとして使われます。このビットが1なら同じ整数に次のバイトが続き、0ならその位置で値が終了します。最下位のグループが先に現れるため、最初のバイトのデータはビット位置0から6、次のバイトは7から13を占め、その後も同様に並びます。たとえばE5 8E 26から継続フラグを除くと、データグループは65、0E、26です。それぞれを7ビットずつずらして結合すると624485になります。小さい値ほど少ないバイトで済み、大きな値も不要な先頭ゼロを使わずに拡張できます。この機能が扱うのは符号なし形式だけです。符号拡張は行わず、データの上位ビットを負の符号として解釈することもありません。結果は10進文字列で返すため、JavaScriptの安全な整数範囲を超える値も正確に保持できます。
バイト列の入力と検証方法
テキスト欄には、完全に符号化された整数を1個だけ貼り付けてください。既定の16進モードでは、1桁または2桁の16進バイトを空白、コンマ、コロン、ハイフンで区切ります。E5 8E 26と0xE5,0x8E,0x26は同じ入力です。0x接頭辞があるトークンは常に16進数として扱われます。解析ツールが0から255までの通常の数でバイトを表示する場合は、10進モードを選択し、229 142 38のように入力してください。不正なトークン、バイト範囲外の値、空の入力、公開上限である128バイトを超える列は拒否されます。構造も検証します。上位ビットが1のバイトは次のバイトが続くことを示すため、80で終わる列は未完了です。一方、上位ビットが0のバイトが現れた時点で値は終了します。それより後のトークンは無視せず、別の整数ともみなさず、エラーとして扱います。この規則により、切り詰めや連結の誤りからもっともらしい値が生じることを防げます。
バイナリ調査で結果を活用する方法
応答には、正確な10進値、消費したバイト数、解析済みのバイト配列、大文字に正規化した16進表記が含まれます。これらを使えば、16進ダンプとの照合やテストフィクスチャへの転記が容易です。WebAssemblyでは、多くのインデックス、長さ、即値整数に符号なしLEB128が使われます。DWARFはコンパクトな属性に使用し、Protocol Buffersはよく似た基数128のvarint配置を採用しています。いずれの場合も、外側の形式が示す開始バイトから、継続ビットが0である最初のバイトまでを集め、その部分だけをデコードしてください。結果が不自然な場合は開始位置と、そのフィールドが本当に符号なしかを確認します。符号付きLEB128やProtocol Buffersのzigzag符号化には追加の解釈が必要であり、このデコーダーでは意図的に行いません。自動検証では、同じ決定的処理をAPIから$0.002で実行できます。同一の入力と形式からは常に同一の出力が得られます。
活用例
WebAssemblyバイナリの調査
WebAssemblyの16進ダンプから、インデックス、セクション長、符号なし即値をデコードできます。
Protocol Buffers varintの解析
フィールド固有の解釈を加える前に、基数128のvarintが表す生の符号なし整数を取得できます。
DWARFデバッグ情報の読み取り
ULEB128の属性やオペランドを正確な10進値へ変換し、終端バイトも確認できます。
よくある質問
デコーダーの料金はいくらですか?
APIリクエスト1回の料金は$0.002です。ブラウザー版は端末内で動作し、無料で利用できます。
符号付きLEB128もデコードできますか?
いいえ。符号なしLEB128だけを扱い、符号拡張は行いません。
値が文字列で返されるのはなぜですか?
10進文字列なら、JavaScriptの安全かつ正確な数値範囲を超える整数も保持できるためです。
0x接頭辞付きのバイトを貼り付けられますか?
はい。0xを付けたトークンは、そのバイトについて常に16進表記として処理されます。
末尾が80だとエラーになるのはなぜですか?
継続ビットが1であり、符号化上は次のバイトが必要なのに入力されていないためです。
Protocol Buffersのvarintは常に最終値ですか?
必ずしもそうではありません。符号付きフィールドでは、生のvarintをデコードした後にzigzagや2の補数の解釈を適用する場合があります。
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/dev/leb128-decode \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"E5 8E 26"}'const res = await fetch("https://api.kit.forhosting.com/dev/leb128-decode", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "E5 8E 26"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/leb128-decode",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "E5 8E 26"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/leb128-decode", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"E5 8E 26"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"E5 8E 26"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/leb128-decode", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"text": "E5 8E 26"
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.leb128_decode",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_items | 128 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |