MessagePack デコーダ
MessagePack は、JSON では大きすぎ protobuf では手続きが重すぎるときに選ばれる形式です。同じ値をバイト列に詰め込みます。ところが不具合が起きると、その小ささがそのまま障害になります。キャッシュやキュー、ログから出てきたペイロードは復号しなければ読めないからです。 このツールは形式全体を読み、JSON なら失われる区別を保ちます。整数は書かれた幅のまま返り、JavaScript の数値に収まらない 64 ビット値は黙って丸めず文字列として保ちます。バイナリはテキストに潰されずバイナリのまま残ります。str と bin の区別は形式の公開後に追加されたもので、両者を混同することこそ復号器がデータを壊す典型です。拡張型は番号とともに示し、タイムスタンプ拡張は三つの符号化すべてを正しく解読します。 結果は値ごとの型を添えたツリーと、JSON として表示します。JSON で表せないものは潰さず明示します。入力に値ひとつ分より多いバイトがあれば——連結されたメッセージ列はそう見えます——残りが何バイトかを伝えます。無いことにはしません。アップロードはされません。
base64 か hex の MessagePack ペイロードを貼り付けると復号します。
使い方
- ペイロードを base64 か hex で貼り付けます。形式は自動判定され、指定もできます。
- ツリーを読みます。各行にキー、MessagePack の型、値が並びます。
- 値を他所で処理するなら JSON をコピーします。
- 取得したペイロードのファイルをドロップすればそのまま復号できます。
- 複数メッセージの列なら、残りバイト数の注記を確認します。
よくある質問
- str と bin の違いは何ですか
- MessagePack には元々テキストにもバイトにも使う raw 型ひとつしかありませんでした。2013 年の改訂で UTF-8 テキスト用の str と任意バイト用の bin に分かれました。そうしないと復号器はバイト列をテキストとして解釈すべきか判断できないからです。bin を文字列として扱うことがバイナリデータの破損経路なので、ここでは両者を分けています。
- 大きな整数が JSON で文字列になるのはなぜですか
- JavaScript の数値が整数を正確に保てるのは 2^53 までです。MessagePack は完全な 64 ビット整数を扱うため、その上限を超える値は JSON 出力で文字列にします。桁が黙って消えるほうが不便さより悪いからです。
- タイムスタンプはどう解読しますか
- 型 -1 のタイムスタンプ拡張には三つの符号化があります。4 バイトの秒、12 バイトのナノ秒と秒、そして 30 ビットのナノ秒を 34 ビットの秒の上に一語へ詰めた 8 バイト形式です。最後が落とし穴で、普通の整数として読むと数万年ずれた日付になります。
- 残りバイトの警告は何を意味しますか
- MessagePack の値は自己完結しているため、ひとつのバッファに複数が並べられます。最初の値が入力より先に終われば、残りはたいてい別のメッセージです。黙って無視せず、どれだけ残っているかを示します。
- タイムスタンプ以外の拡張型は
- 型番号と base64 のペイロードで示します。拡張の意味はそれを書いたアプリケーションが決めるので、汎用に復号できる対象がありません。
- ペイロードはアップロードされますか
- いいえ。バイト列はブラウザ内で復号され、サーバーには送信されません。
関連ツール
Plist ビューア(バイナリ・XML)
Apple のプロパティリストをバイナリでも XML でも開いてツリーで読み、JSON や XML plist に変換できます。
Protobuf デコーダ(.proto 不要)
base64 か hex の protobuf バイト列を貼り付けると、スキーマなしでフィールド番号、ワイヤ型、ネストしたメッセージ、文字列、packed 配列を読み取ります。
JWT デコーダー
JWT のヘッダー・クレーム・有効期限を即座に確認。
Hex Dump ビューア
テキストまたは小さなファイルをオフセット + hex バイト + 印字可能 ASCII で表示。`xxd` や `hexdump -C` 形式。
ビット演算 計算機
2つの整数の AND・OR・XOR・NOT・シフトを、2進数・16進数・符号なし/符号付き10進数で一覧表示。8・16・32・64ビット幅を選択可能。
ASCII コード表
256 行の ASCII / 拡張 ASCII 表 — 10進・16進・8進・2進、制御文字の名前まで。検索・コピー対応。