Protocol Buffers-decoder
Inspecteer een gecodeerd Protocol Buffers-bericht zonder het te uploaden of te doen alsof het schema bekend is. Deze browserdecoder accepteert expliciet hexadecimale gegevens, Base64, Base64URL, onbewerkte UTF-8-tekst of een binair bestand. Hij doorloopt elk geldig wire-type, houdt 64-bits gehele getallen exact, meldt de byte-offset van ongeldige gegevens en toont alle volledige interpretaties van dubbelzinnige waarden met een lengteprefix. De payload blijft in de browser en diensten die in de gegevens worden genoemd, worden nooit benaderd.
Hoe het werkt
-
1
Kies de exacte codering
Selecteer hex, Base64, Base64URL, onbewerkte UTF-8-tekst of een binair bestand. De tool raadt het invoerformaat nooit automatisch.
-
2
Inspecteer wire-velden
Decodeer tags, veldnummers en wire-waarden en vouw elke geldige geneste of packed kandidaat open zonder een schematype toe te wijzen.
-
3
Exporteer het rapport
Download een schemaloos JSON-rapport, formuleveilige CSV of goed leesbaar tekstrapport.
Wat een Protobuf-decoder zonder schema kan bewijzen
Protocol Buffers bewaart een reeks veldtags en waarden, niet de oorspronkelijke .proto-declaraties. De officiële protobuf-coderingsgids definieert elke tag als (field_number << 3) | wire_type. Daardoor kan deze decoder het veldnummer, wire-type, bytebereik en de structureel mogelijke coderingen vaststellen. Hij kan niet bewijzen of een varint als uint64, int64, sint64, bool of enum is gedeclareerd, want die declaraties kunnen dezelfde bytes gebruiken.
De invoermodus wordt altijd expliciet gekozen. Hex staat ASCII-witruimte en hoogstens één voorloopwaarde 0x toe. Base64 en Base64URL worden afzonderlijk gecontroleerd, inclusief lengte, padding en ongebruikte paddingbits; standaard- en URL-veilige alfabetten mogen niet worden gemengd. Onbewerkte tekst betekent precies de UTF-8-bytes van de TextEncoder in de browser, backslash-escapes worden niet geïnterpreteerd. Bestandsinvoer gebruikt de exacte bytes.
Wire-typen en interpretaties
| Wire-type | Gecodeerde waarde | Wat het rapport toont |
|---|---|---|
| 0 | Varint | Exacte unsigned waarde, signed tweescomplement en ZigZag; boolean alleen voor 0 of 1 |
| 1 | Acht little-endian bytes | Exacte fixed64- en sfixed64-getallen plus een double-kandidaat |
| 2 | Lengte gevolgd door bytes | Hex en Base64, strikt UTF-8 indien geldig en elke volledige geneste of packed kandidaat |
| 3 / 4 | Start- en eindtags van groep | Kindvelden van de groep met hetzelfde veldnummer; de eindtag begrenst en is geen apart record |
| 5 | Vier little-endian bytes | Exacte fixed32- en sfixed32-getallen plus een float-kandidaat |
Het gewone Number-type van JavaScript kan niet elk 64-bits geheel getal exact weergeven. De parser gebruikt daarom overal BigInt en zet exacte gehele getallen voor weergave en export om in decimale tekenreeksen. Bijzondere zwevendekommawaarden zoals NaN, oneindigheden en negatieve nul worden eveneens als tekst geëxporteerd, zodat JSON ze niet stilzwijgend verandert.
Dubbelzinnigheid bij waarden met een lengteprefix
Wire-type 2 wordt gebruikt voor tekenreeksen, ruwe bytes, ingesloten berichten en packed herhaalde scalaire waarden. Zonder schema kan één bytereeks meerdere rollen hebben. 2a 03 01 02 03 is bijvoorbeeld veld 5 met drie bytes. Die bytes zijn geldige packed varints [1, 2, 3], maar ook gewone bytes. De decoder toont beide mogelijkheden zonder er één waarschijnlijker te noemen.
Een geneste-berichtkandidaat verschijnt alleen wanneer de volledige inhoud als compleet bericht kan worden gelezen. Kandidaten voor packed varint, fixed32 en fixed64 verschijnen eveneens alleen als de interpretatie alle bytes verbruikt. Een strikte UTF-8-kandidaat moet volledig zonder vervangingstekens decoderen. Dit zijn structurele mogelijkheden, niet het gedeclareerde veldtype.
Groepen worden volgens de wire-grammatica verwerkt, al gebruiken moderne schema’s meestal ingesloten berichten. Een starttag moet sluiten met een eindtag met hetzelfde veldnummer. Een eindtag op rootniveau, afwijkend nummer of ontbrekende afsluiting geeft een fatale fout op de exacte byte-offset. Eerder volledig gedecodeerde velden blijven zichtbaar; ontbrekende bytes en onbekende waarden worden nooit een verzonnen nul.
Limieten, framing en veilig gebruik
De decoder accepteert één ongeframed bericht tot 10 MiB. Hij splitst geen streams met lengteprefix, gRPC-frames, bestanden met afgebakende berichten of transport-enveloppen. Verwijder eerst de framing en decodeer daarna één bericht. De parser begrenst het aantal records, recursiediepte, zichtbare rijen en kandidaatwerk, in de geest van de officiële informatie over grote gegevensverzamelingen en implementatielimieten.
Veldnummers moeten tussen 1 en 536.870.911 liggen. Voor 19.000–19.999 verschijnt een waarschuwing, omdat de officiële richtlijn voor veldnummers dit implementatiebereik reserveert. Wire-typen 6 en 7 zijn ongeldig.
Parsing en export vinden lokaal plaats. De meerstapsweergave kan een begrensde payload maximaal twee uur in de sessionStorage van dit tabblad bewaren; opnieuw beginnen verwijdert deze. Niets komt in de URL of wordt naar onze servers verzonden. JSON is nadrukkelijk een decoderapport in de eigen indeling van deze tool, geen ProtoJSON. CSV begint met een UTF-8-BOM en neutraliseert formuleachtige cellen om veiliger in spreadsheets te openen. Rapporten kunnen nog steeds vertrouwelijke applicatiegegevens bevatten: controleer ze voordat u ze deelt.
Veelgestelde vragen
Nee. Het wire-format bewaart veldnummers en wire-coderingen, maar verschillende gedeclareerde scalaire typen kunnen dezelfde bytes gebruiken. Namen, opmerkingen en de meeste schema-intentie ontbreken.
Nee. Invoervalidatie, parsing, filtering en export draaien in de browser. De payload wordt niet via onze servers verstuurd en niet in de URL geplaatst.
Een waarde met lengteprefix kan bytes, UTF-8-tekst, een ingesloten bericht of packed waarden voorstellen. Zonder schema is elke volledige kandidaat tonen betrouwbaarder dan gokken.
Daar was een tag, varint, waarde met vaste breedte, opgegeven lengte of groepsgrens onvolledig of ongeldig. Eerdere complete velden blijven in het deelrapport staan.
Niet rechtstreeks. Deze decoder leest één protobuf-bericht en verwijdert geen gRPC-, varint-lengte- of andere transportframing. Haal eerst de payload van één bericht uit de stream.
Gerelateerde tools
JSON naar PHP-array
Zet JSON om naar een PHP-array-literal met korte syntaxis, associatieve/geïndexeerde arrays en geneste structuren, klaar om in een .php-bestand te plakken.
Luhn-algoritme-checker
Controleer de creditcardnummer, IMEI, SIN en andere door Luhn beschermden nummers. Geef een resultaat terug (goed of fout) en toon elke stap van het verdubbelen en het berekenen van de controlesom aan.
ASCII-tabelreferentie
Volledige ASCII-tabel van 0 tot 127 met decimale, hexadecimale, octale en binaire waarden en HTML-numerieke referentienotatie, inclusief control codes zoals NUL, LF en DEL.
Telefoonnummers controleren
Controleer de structuur van telefoonnummers per land en bekijk regio, type en E.164-, internationale, nationale en RFC 3966-notatie.
SVG-golfgenerator
Genereer een vloeiende SVG-golfscheiding voor headers en footers met instelbare amplitude, frequentie, kleur en positie boven of onder. Kopieer de SVG-code.
Sneltoetsenoverzicht
Zoek gedocumenteerde standaardsneltoetsen voor VS Code, Chrome en Bash met GNU Readline op macOS, Windows en Linux.
Tool beschikbaar in andere talen
- Protocol Buffers 디코더 [KO]
- Protocol Buffers-avkodare [SV]
- ตัวถอดรหัส Protocol Buffers [TH]
- أداة فك ترميز Protocol Buffers [AR]
- Công cụ giải mã Protocol Buffers [VI]
- Protocol-Buffers-Decoder [DE]
- Décodeur Protocol Buffers [FR]
- Dekoder Protocol Buffers [ID]
- Decodificador de Protocol Buffers [ES]
- Dekoder Protocol Buffers [PL]
- Protocol Buffers デコーダー [JA]
- Decodificador de Protocol Buffers [PT]
- Protocol Buffers Kod Çözücü [TR]
- Protocol Buffers 解码器 [ZH]
- Protocol Buffers Decoder [EN]
- Decodificatore Protocol Buffers [IT]
- Декодер Protocol Buffers [RU]