Vai al contenuto

Decodificatore protobuf

Protobuf Decoder

Decodifica un payload protobuf senza il file .proto, deducendo numeri di campo, tipi di wire e annidamento.

Decodifica un payload protobuf senza il file `.proto`. Legge il formato di trasmissione — numeri di campo, tipi di wire, annidamento — e mostra affiancate tutte le letture valide di ogni valore, perché senza lo schema più di una ce n’è davvero.

🔒 Funziona interamente nel tuo browserprotobufdecodebinarygrpc

Payload

Trascina qui un payload binario

Decodificato in questa scheda. Non viene caricato nulla.

Campi

Campi di primo livello

3

Dimensione totale

17 byte

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

Come JSON (numeri di campo al posto dei nomi)

Senza il file .proto non ci sono nomi di campo e uno stesso payload può avere più letture valide: un varint viene mostrato insieme come senza segno, con segno e zigzag, e un campo con lunghezza come messaggio, testo o byte. L’annidamento mostrato è la lettura in cui ogni byte torna esatto; le alternative sono stampate accanto, non nascoste.

Come si usa

  1. Incollare i byte o trascinare il file

    Esadecimale con o senza spazi, oppure Base64. In alternativa si può trascinare un file binario fino a 32 MB.

  2. Leggere l’elenco dei campi

    Ogni riga dà il numero di campo, il tipo di wire, l’offset in byte e la lunghezza, e le letture. I messaggi annidati sono rientrati sotto il loro genitore.

  3. Prendere la proiezione JSON

    Lo stesso albero in JSON, con i numeri di campo al posto dei nomi. Utile per fare il diff di due payload, o per incollarlo in una issue.

Domande frequenti

Perché non ci sono i nomi dei campi?

Perché protobuf non li mette sul filo. Il messaggio codificato porta soltanto i *numeri* di campo: i nomi vivono nel file `.proto`, che è esattamente ciò che rende compatto il formato ed esattamente il motivo per cui una decodifica senza schema può mostrare solo numeri.

Perché un valore è mostrato in tre modi diversi?

Perché un varint sul filo è solo bit: gli stessi byte sono un `uint64` valido, un `int64` valido e un `sint64` zigzag valido, e solo lo schema dice quale sia. Mostrarne uno e nascondere gli altri sarebbe una supposizione presentata come un fatto.

Come decide che un campo è un messaggio annidato?

Un campo delimitato in lunghezza potrebbe essere un messaggio, una stringa o byte grezzi. Viene mostrato come messaggio quando il suo contenuto si analizza per intero — ogni byte consumato, niente avanzi — e la lettura come stringa viene stampata accanto quando i byte sono anche testo stampabile. Ogni tanto una stringa corta si analizza come messaggio per coincidenza; ci sono entrambe le letture, così si può distinguere.

Riesce a decodificare traffico gRPC?

Il corpo del messaggio sì, una volta tolta dall’inizio l’intestazione di frame gRPC da cinque byte — un flag di compressione e una lunghezza big-endian da quattro byte. Dandogli i byte che seguono, decodifica normalmente.

Può ricevere da

Dopo

Questi accettano ciò che produce questo strumento, così il risultato può passare direttamente.