Decodificatore Protocol Buffers
Esamina un messaggio Protocol Buffers codificato senza caricarlo online né fingere di conoscerne lo schema. Questo decodificatore nel browser accetta esplicitamente dati esadecimali, Base64, Base64URL, testo UTF-8 grezzo o un file binario. Legge ogni wire type valido, mantiene esatti gli interi a 64 bit, indica l’offset dei dati malformati e mostra tutte le interpretazioni complete dei valori length-delimited ambigui. Il payload resta nel browser e nessun servizio citato nei dati viene contattato.
Come funziona
-
1
Scegli la codifica esatta
Seleziona esadecimale, Base64, Base64URL, testo UTF-8 grezzo o file binario. Lo strumento non prova mai a indovinare il formato.
-
2
Esamina i campi wire
Decodifica tag, numeri di campo e valori wire, quindi espandi ogni candidato annidato o packed valido senza attribuirgli un tipo di schema.
-
3
Esporta il report
Scarica un JSON senza schema, un CSV protetto dalle formule o un report di testo leggibile.
Cosa può dimostrare un decodificatore Protobuf senza schema
Protocol Buffers memorizza una sequenza di tag e valori di campo, non le dichiarazioni .proto originali. La guida ufficiale alla codifica protobuf definisce ogni tag come (field_number << 3) | wire_type. Il decodificatore può quindi stabilire numero di campo, wire type, confini dei byte e codifiche strutturalmente possibili. Non può stabilire se un varint sia stato dichiarato uint64, int64, sint64, bool o enum, perché dichiarazioni diverse possono condividere gli stessi byte.
La modalità di input è sempre esplicita. L’esadecimale ammette spazi ASCII e al massimo un 0x iniziale. Base64 e Base64URL vengono convalidati separatamente, compresi lunghezza, padding e bit di riempimento inutilizzati; non è possibile mescolare gli alfabeti standard e URL-safe. Testo grezzo indica gli esatti byte UTF-8 prodotti dal TextEncoder del browser: le sequenze di escape con barra inversa non vengono interpretate. Per i file si usano i byte esatti.
Wire type e interpretazioni
| Wire type | Valore codificato | Cosa mostra il report |
|---|---|---|
| 0 | Varint | Valori esatti senza segno, con segno in complemento a due e ZigZag; booleano solo per 0 o 1 |
| 1 | Otto byte little-endian | Interi fixed64 e sfixed64 esatti, più un candidato double |
| 2 | Lunghezza seguita dai byte | Esadecimale e Base64, UTF-8 rigoroso se valido e tutti i candidati annidati o packed completi |
| 3 / 4 | Tag di inizio e fine gruppo | Figli del gruppo con lo stesso numero di campo; il tag finale delimita e non è un record separato |
| 5 | Quattro byte little-endian | Interi fixed32 e sfixed32 esatti, più un candidato float |
Il normale tipo Number di JavaScript non rappresenta esattamente ogni intero a 64 bit. Il parser usa BigInt ovunque e converte gli interi esatti in stringhe decimali per visualizzazione ed esportazione. Anche NaN, infinito e zero negativo vengono esportati come stringhe, evitando conversioni silenziose da parte di JSON.
Capire l’ambiguità dei valori length-delimited
Il wire type 2 serve per stringhe, byte grezzi, messaggi incorporati e scalari ripetuti packed. Senza schema, una sequenza può essere valida in più ruoli. Ad esempio, 2a 03 01 02 03 è il campo 5 con tre byte: sono varint packed validi [1, 2, 3], ma anche semplici byte. Il decodificatore mostra entrambe le possibilità senza privilegiarne una.
Un candidato a messaggio annidato compare solo se l’intero corpo length-delimited forma un messaggio completo. Anche i candidati varint, fixed32 e fixed64 packed compaiono soltanto se consumano tutti i byte. Un candidato UTF-8 rigoroso deve decodificare tutta la sequenza senza caratteri sostitutivi. Sono possibilità strutturali, non il tipo dichiarato del campo.
I gruppi vengono gestiti secondo la grammatica wire, anche se gli schemi moderni preferiscono messaggi incorporati. Un tag di inizio deve chiudersi con un tag finale dello stesso campo. Una chiusura alla radice, un numero diverso o una chiusura mancante causa un errore fatale all’offset esatto. I campi completi precedenti restano visibili; byte mancanti e valori ignoti non diventano mai uno zero fittizio.
Limiti, framing e gestione sicura
Il decodificatore accetta un solo messaggio privo di framing, fino a 10 MiB. Non separa stream con prefisso di lunghezza, frame gRPC, file di messaggi delimitati o envelope di trasporto. Rimuovi prima il framing e poi decodifica un messaggio. Il parser limita record totali, profondità ricorsiva, righe visibili e lavoro sui candidati, in linea con le indicazioni ufficiali su grandi quantità di dati e limiti di implementazione.
I numeri di campo devono essere compresi tra 1 e 536.870.911. L’intervallo 19.000–19.999 genera un avviso perché la guida ufficiale ai numeri di campo lo riserva alle implementazioni. I wire type 6 e 7 non sono validi.
Analisi ed esportazione avvengono localmente. La vista a più passaggi può conservare un payload limitato nel sessionStorage della scheda per un massimo di due ore; ricominciare lo elimina. Nulla finisce nell’URL o passa tramite i nostri server. Il JSON è esplicitamente un report di decodifica nel formato proprio di questo strumento, non ProtoJSON. Il CSV inizia con un BOM UTF-8 e neutralizza le celle simili a formule per un’apertura più sicura nei fogli di calcolo. I report possono comunque contenere dati riservati: controllali prima di condividerli.
Domande frequenti
No. Il wire format conserva numeri di campo e codifiche wire, ma tipi scalari dichiarati diversi possono condividere gli stessi byte. Nomi, commenti e gran parte dell’intento dello schema non sono presenti.
No. Convalida, parsing, filtri ed esportazioni funzionano nel browser. Il payload non passa tramite i nostri server e non viene inserito nell’URL.
Un valore length-delimited può rappresentare byte, testo UTF-8, un messaggio incorporato o valori packed. Senza schema, mostrare tutti i candidati completi è più corretto che indovinare.
In quel punto un tag, varint, valore a larghezza fissa, lunghezza dichiarata o confine di gruppo era incompleto o non valido. I campi completi precedenti restano nel report parziale.
Non direttamente. Il decodificatore legge un solo messaggio protobuf e non rimuove framing gRPC, lunghezze varint o altri envelope di trasporto. Estrai prima il payload di un messaggio.
Strumenti correlati
Generatore di lettere casuali
Genera lettere A-Z casuali. Scegli la quantità, usa maiuscole, minuscole o un mix, e applica il risultato a giochi, spunti o attività in classe.
Riferimento Tabella ASCII
Tabella ASCII completa da 0 a 127 con decimale, esadecimale, ottale, binario e riferimento numerico HTML per ogni carattere, inclusi i codici di controllo come NUL, LF e DEL.
Convertitore da Markdown a BBCode
Converti documenti Markdown in BBCode per phpBB, vBulletin e software per forum che accetta solo la formattazione BBCode.
Convertitore di dimensioni file
Converti tra byte, KB, MB, GB, TB e le unità binarie IEC (KiB, MiB, GiB, TiB), combinando decimale e binario come preferisci.
Convertitore da INI a YAML
Converti file di configurazione INI in YAML. Le sezioni diventano mappature, i valori sono preservati come stringhe. Pronto per Helm, Ansible e pipeline CI.
Generatore di Meta Tag
Crea un frammento completo `<head>` con titolo, descrizione, Open Graph, Twitter Card, tag canonici e robots da un semplice modulo.
Strumento disponibile in altre lingue
- Protocol Buffers 디코더 [KO]
- Protocol Buffers-avkodare [SV]
- Protocol Buffers-decoder [NL]
- Dekoder Protocol Buffers [PL]
- Protocol-Buffers-Decoder [DE]
- ตัวถอดรหัส Protocol Buffers [TH]
- Decodificador de Protocol Buffers [ES]
- Dekoder Protocol Buffers [ID]
- أداة فك ترميز Protocol Buffers [AR]
- Décodeur Protocol Buffers [FR]
- Protocol Buffers デコーダー [JA]
- Decodificador de Protocol Buffers [PT]
- Công cụ giải mã Protocol Buffers [VI]
- Protocol Buffers Decoder [EN]
- Декодер Protocol Buffers [RU]
- Protocol Buffers Kod Çözücü [TR]
- Protocol Buffers 解码器 [ZH]