Zum Inhalt springen

Protobuf-Decoder

Protobuf Decoder

Dekodiert eine Protobuf-Nutzlast ohne die .proto-Datei und leitet Feldnummern, Wire-Typen und Verschachtelung ab.

Dekodiert eine Protobuf-Nutzlast ohne die `.proto`-Datei. Es liest das Wire-Format – Feldnummern, Wire-Typen, Verschachtelung – und zeigt jede gültige Lesart jedes Werts nebeneinander, denn ohne das Schema gibt es tatsächlich mehr als eine.

🔒 Läuft vollständig in Ihrem Browserprotobufdecodebinarygrpc

Nutzlast

Eine binäre Nutzlast ablegen

Wird in diesem Tab dekodiert. Es wird nichts hochgeladen.

Felder

Felder der obersten Ebene

3

Gesamtgröße

17 Byte

  • #1VARINT@0, 3 Buint 150 · zigzag 75
  • #2LEN@3, 9 B"testing"
  • #3LEN@12, 5 BNachricht (1 Feld)
    • #1VARINT@0, 3 Buint 150 · zigzag 75

Als JSON (Feldnummern statt Namen)

Ohne die Datei .proto gibt es keine Feldnamen, und eine Nutzlast kann mehrere gültige Lesarten haben: ein Varint wird zugleich vorzeichenlos, vorzeichenbehaftet und als Zigzag gezeigt, ein längenbegrenztes Feld als Nachricht, Text oder Bytes. Die gezeigte Verschachtelung ist die Lesart, in der jedes Byte genau aufgeht; die Alternativen stehen daneben, sie werden nicht versteckt.

So funktioniert es

  1. Fügen Sie die Bytes ein oder legen Sie die Datei ab

    Hex mit oder ohne Leerzeichen, oder Base64. Eine Binärdatei bis 32 MB kann stattdessen abgelegt werden.

  2. Lesen Sie die Feldliste

    Jede Zeile nennt Feldnummer, Wire-Typ, Byte-Offset und Länge sowie die Lesarten. Verschachtelte Nachrichten sind unter ihrem Elternteil eingerückt.

  3. Nehmen Sie die JSON-Projektion

    Derselbe Baum als JSON, mit Feldnummern anstelle von Namen. Nützlich, um zwei Nutzlasten zu vergleichen oder um es in ein Issue einzufügen.

Häufige Fragen

Warum gibt es keine Feldnamen?

Weil Protobuf sie nicht auf die Leitung legt. Die kodierte Nachricht trägt nur Feld*nummern* – die Namen leben in der `.proto`-Datei, was genau das ist, was das Format kompakt macht, und genau der Grund, warum ein schemaloses Dekodieren Ihnen nur Nummern zeigen kann.

Warum wird ein Wert auf drei verschiedene Arten angezeigt?

Weil ein Varint auf der Leitung nur Bits ist: Dieselben Bytes sind ein gültiges `uint64`, ein gültiges `int64` und ein gültiges Zigzag-`sint64`, und nur das Schema sagt, welches. Eines zu zeigen und die anderen zu verbergen wäre eine Vermutung, die als Tatsache präsentiert wird.

Wie entscheidet es, dass ein Feld eine verschachtelte Nachricht ist?

Ein längenbegrenztes Feld könnte eine Nachricht, ein String oder rohe Bytes sein. Es wird als Nachricht gezeigt, wenn sein Inhalt vollständig parst – jedes Byte verbraucht, keine Reste –, und die String-Lesart wird daneben ausgegeben, wenn die Bytes auch druckbarer Text sind. Gelegentlich parst ein kurzer String zufällig als Nachricht; beide Lesarten sind da, damit Sie es erkennen können.

Kann es gRPC-Verkehr dekodieren?

Den Nachrichten-Body ja, sobald Sie den fünf Byte langen gRPC-Frame-Header – ein Kompressionsflag und eine Vier-Byte-Länge in Big-Endian – vorne entfernt haben. Geben Sie die Bytes danach ein, und es dekodiert normal.

Eingabe aus

Danach

Diese Tools nehmen an, was dieses hier erzeugt, das Ergebnis kann also direkt weiter.