Protobuf デコーダー(オンライン)
Protocol Buffers のバイナリメッセージを .proto スキーマなしでブラウザ内でデコード。バイトは端末上に留まります。
protobufのバイトはブラウザ内でローカルにデコードされ、アップロードされることはありませんが、実際の秘密情報や個人データを含むメッセージをツールに貼り付けるのは避けてください。
代わりにJWTをデコードしたいですか?JWTデコーダーをお試しください。
Protobuf デコーダー について
このProtobufデコーダーは、Protocol Buffers のバイナリメッセージを .proto ファイルなしで、バイト列から直接読み取ります。ペイロードをhexまたはbase64で貼り付けると、生のワイヤーフォーマットを走査します。各タグを読み取ってフィールド番号とワイヤータイプを復元し、値を解釈します。varintは int64・uint64・ジグザグの読み方として、fixed64とfixed32は整数・double・floatの見方として示し、length-delimitedのフィールドはまずネストしたメッセージとして、次にUTF-8テキストとして、最後に生のhexバイトとして試します。結果はインデントされたフィールドのツリーとして描画され、繰り返しフィールドは同じ番号の下にまとめられます。gRPCのトラフィック、キャプチャしたパケット、ログ中の不透明なprotoブロブをデバッグするエンジニアのために作られています。すべてはブラウザ内で動作するため、貼り付けたバイトはローカルでデコードされ、端末から外に出ることはありません。
機能
- あらゆるProtocol Buffersメッセージを .proto スキーマなしで生のバイトからデコード
- hexまたはbase64入力を自動検出し、手動の形式切り替えにも対応
- タグから varint・fixed64・length-delimited・fixed32 のワイヤータイプを読み取り
- varintを int64・uint64・符号付きジグザグ・真偽値の解釈として表示
- fixed64/fixed32フィールドを整数・double・floatの見方と生のバイトで描画
- ネストしたメッセージを再帰的にデコードし、UTF-8文字列やhexバイトにフォールバック
- 繰り返しフィールドを同じフィールド番号の下にインデントしたツリーでまとめる
- 切り詰められた・不正な・protobufでない入力に対して明確なエラーを報告
Protobuf デコーダー の使い方
- protobufペイロードをhex文字列またはbase64としてコピーします。
- Protobufメッセージのボックスに貼り付けます。
- 形式はAutoのままにするか、検出が誤っていればHexかBase64を選びます。
- デコードされたフィールドのツリーを読み、ネストしたメッセージを展開して値を確認します。
例
入力
08 96 01 12 07 74 65 73 74 69 6e 67
出力
#1 varint wire 0 150
#2 string wire 2 "testing"
フィールド1はvarint(150)、フィールド2はlength-delimitedのUTF-8文字列です。
よくあるエラーとトラブルシューティング
- デコーダーが「Input is not valid hex」または「Input is not valid base64」と表示する。 — 形式の切り替えをデータに合わせるか、余計な文字を取り除いてください。hexは 0-9a-f のペアでなければならず、base64は標準またはURLセーフのアルファベットを使う必要があります。
- 文字列のはずのフィールドが、ネストしたメッセージや生のhexとして描画される。 — .proto ファイルがないとデコーダーはバイトから推測します。length-delimitedのフィールドは曖昧なため、テキストに見えるサブメッセージ(やその逆)が誤読されることがあります。
- デコードが「Length-delimited field runs past the end of the input」で失敗する。 — ペイロードが切り詰められているか、実際にはprotobufではありません。完全なメッセージを取り直し、末尾を含めてすべてのバイトをコピーしたか確認してください。
- Group のワイヤータイプがサポート外として報告される。 — ワイヤータイプ3と4(start-group/end-group)はprotobufで非推奨でほとんど使われません。groupの代わりにproto2/proto3のフィールドでメッセージを再エンコードしてください。
よくある質問
- .proto ファイルなしでprotobufをデコードできますか。
- はい。このProtobufデコーダーは生のワイヤーフォーマットを読むため、すべてのフィールド番号・ワイヤータイプ・値をバイトから直接復元します。スキーマがないと元のフィールド名や、数値が符号付き・符号なし・enumのどれを意図したかは分からないため、もっともらしい解釈を並べて示します。
- protobufのワイヤータイプは何を意味しますか。
- 各フィールドのタグはワイヤータイプをエンコードします。0はvarint(整数・真偽値・enum)、1はfixed64(sfixed64・double)、2はlength-delimited(文字列・バイト・ネストメッセージ)、5はfixed32(sfixed32・float)です。デコーダーは各フィールドにワイヤータイプを表示するので、元の定義に対応づけられます。
- protobufはhexとbase64のどちらで貼り付けるべきですか。
- どちらでも動きます。切り替えをAutoのままにすればツールが形式を検出します。きれいなhex(hex数字のペア、空白・コロン・0xプレフィックスは任意)はhexとして読まれ、それ以外はURLセーフを含めてbase64として扱われます。データが曖昧な場合は切り替えを手動で変更してください。
- なぜvarintが複数の異なる数値として表示されるのですか。
- protobufのvarintは int64・uint64・ジグザグエンコードの sint64 を表せますが、ワイヤーフォーマットはどれかを記録しません。デコーダーはそれらすべてに加え、0と1には真偽値の読み方も表示するので、スキーマに合う解釈を選べます。
- デコードしたペイロードはどこかにアップロードされますか。
- いいえ。protobufのデコードは純粋なJavaScriptのワイヤーフォーマットパーサーを使い、すべてブラウザ内で動作するため、貼り付けたバイトは端末上で処理され、サーバーへ送信されることはありません。
関連ツール
すべての ArrayKit ツール