Décodeur Protocol Buffers
Inspectez un message Protocol Buffers encodé sans le téléverser ni prétendre connaître son schéma. Ce décodeur exécuté dans le navigateur accepte explicitement des données hexadécimales, Base64, Base64URL, du texte UTF-8 brut ou un fichier binaire. Il parcourt chaque type wire valide, conserve la valeur exacte des entiers 64 bits, signale l’offset des données mal formées et affiche toutes les interprétations complètes des valeurs délimitées par une longueur. Le payload reste dans votre navigateur et aucun service mentionné dans les données n’est contacté.
Fonctionnement
-
1
Choisissez précisément l’encodage
Sélectionnez hexadécimal, Base64, Base64URL, texte UTF-8 brut ou fichier binaire. L’outil ne tente jamais de deviner le format.
-
2
Inspectez les champs wire
Décodez les tags, numéros de champ et valeurs wire, puis développez chaque candidat imbriqué ou packed valide sans lui attribuer un type de schéma.
-
3
Exportez le rapport
Téléchargez un rapport JSON sans schéma, un CSV protégé contre les formules ou un rapport texte lisible.
Ce qu’un décodeur Protobuf sans schéma peut établir
Protocol Buffers stocke une suite de tags de champ et de valeurs, pas les déclarations .proto d’origine. Le guide officiel de l’encodage protobuf définit chaque tag par (field_number << 3) | wire_type. Le décodeur peut donc établir le numéro de champ, le type wire, les limites en octets et les encodages structurellement possibles. Il ne peut pas déterminer si un varint a été déclaré comme uint64, int64, sint64, bool ou enum, car ces déclarations peuvent partager les mêmes octets.
Le mode d’entrée est toujours choisi explicitement. Le mode hexadécimal accepte les espaces ASCII et au plus un préfixe 0x. Base64 et Base64URL sont validés séparément, y compris leur longueur, leur padding et leurs bits de remplissage inutilisés ; les alphabets standard et compatible URL ne peuvent pas être mélangés. Le texte brut correspond exactement aux octets UTF-8 produits par le TextEncoder du navigateur : les séquences d’échappement avec barre oblique inverse ne sont pas interprétées. Pour un fichier, les octets exacts sont lus.
Types wire et interprétations
| Type wire | Valeur encodée | Contenu du rapport |
|---|---|---|
| 0 | Varint | Valeurs exactes non signée, signée en complément à deux et ZigZag ; booléen uniquement pour 0 ou 1 |
| 1 | Huit octets little-endian | Entiers fixed64 et sfixed64 exacts, plus un candidat double |
| 2 | Longueur suivie d’octets | Hexadécimal et Base64, UTF-8 strict s’il est valide, puis tous les candidats imbriqués ou packed complets |
| 3 / 4 | Tags de début et de fin de groupe | Enfants du groupe portant le même numéro de champ ; le tag final délimite et ne constitue pas un enregistrement |
| 5 | Quatre octets little-endian | Entiers fixed32 et sfixed32 exacts, plus un candidat float |
Le type Number ordinaire de JavaScript ne représente pas exactement tous les entiers 64 bits. Le parseur utilise donc BigInt de bout en bout et convertit les entiers exacts en chaînes décimales pour l’affichage et l’export. Les valeurs flottantes particulières comme NaN, les infinis et le zéro négatif sont aussi exportées sous forme de chaînes afin que JSON ne les transforme pas silencieusement.
Comprendre l’ambiguïté des valeurs délimitées par une longueur
Le type wire 2 sert aux chaînes, aux octets bruts, aux messages intégrés et aux valeurs scalaires répétées packed. Sans schéma, une même séquence d’octets peut remplir plusieurs rôles. Par exemple, 2a 03 01 02 03 est le champ 5 contenant trois octets. Ils forment des varints packed valides [1, 2, 3], mais restent aussi de simples octets. Le décodeur affiche les deux possibilités sans en présenter une comme plus probable.
Un candidat de message imbriqué n’apparaît que si tout le contenu délimité par la longueur forme un message complet. Les candidats varint, fixed32 et fixed64 packed ne sont également affichés que si leur interprétation consomme tous les octets. Un candidat UTF-8 strict exige que toute la séquence soit décodée sans caractère de remplacement. Ces vérifications indiquent des possibilités structurelles, et non le type déclaré du champ.
Les groupes sont analysés selon la grammaire wire, même si les schémas modernes préfèrent généralement les messages intégrés. Un tag de début de groupe doit être fermé par un tag de fin portant le même numéro de champ. Une fin au niveau racine, un numéro différent ou une fin manquante produit une erreur fatale à l’offset exact. Les champs complets décodés auparavant restent visibles ; les octets manquants et valeurs inconnues ne deviennent jamais un faux zéro.
Limites, framing et manipulation sûre
Le décodeur accepte un seul message sans framing, limité à 10 Mio. Il ne sépare pas un flux préfixé par une longueur, une frame gRPC, un fichier de messages délimités ni une enveloppe de transport. Retirez d’abord ce framing, puis décodez un message. Le parseur limite le nombre total d’enregistrements, la profondeur récursive, les lignes visibles et le travail consacré aux candidats. Ces protections suivent l’esprit des recommandations officielles sur les grands jeux de données et les limites d’implémentation : protobuf est efficace, mais un onglet de diagnostic doit tout de même borner sa mémoire et son travail.
Les numéros de champ doivent être compris entre 1 et 536 870 911. La plage 19 000–19 999 déclenche un avertissement, car les recommandations officielles sur les numéros de champ réservent cette plage à l’implémentation. Les types wire 6 et 7 sont invalides.
L’analyse et les exports se font localement. La vue en plusieurs étapes peut conserver un payload limité dans le sessionStorage de cet onglet pendant deux heures au maximum ; recommencer l’efface. Rien n’est ajouté à l’URL ni envoyé à nos serveurs. La sortie JSON est explicitement un rapport de décodage au format propre à cet outil, pas du ProtoJSON. Le CSV commence par un BOM UTF-8 et neutralise les cellules ressemblant à des formules pour une ouverture plus sûre dans un tableur. Un rapport peut malgré tout contenir des données applicatives confidentielles : vérifiez-le avant de le partager.
Questions fréquentes
Non. Le format wire conserve les numéros de champ et leurs encodages, mais plusieurs types scalaires déclarés peuvent partager les mêmes octets. Les noms, commentaires et la plupart des intentions du schéma sont absents.
Non. La validation, l’analyse, les filtres et les exports s’exécutent dans votre navigateur. Le payload n’est ni envoyé à nos serveurs ni placé dans l’URL.
Une valeur délimitée par une longueur peut représenter des octets, du texte UTF-8, un message intégré ou des valeurs packed. Sans schéma, afficher chaque candidat complet est plus fidèle que deviner.
À cet endroit, un tag, un varint, une valeur de largeur fixe, une longueur déclarée ou une limite de groupe était incomplet ou invalide. Les champs complets précédents restent dans le rapport partiel.
Pas directement. Ce décodeur lit un seul message protobuf et ne retire ni le framing gRPC, ni une longueur varint, ni toute autre enveloppe de transport. Extrayez d’abord le payload d’un message.
Outils similaires
Référence de la table ASCII
Table ASCII complète de 0 à 127 avec décimal, hexadécimal, octal, binaire et référence numérique HTML pour chaque caractère, y compris les codes de contrôle comme NUL, LF et DEL.
Référence des caractères HTML
Liste consultable des entités HTML, de leurs codes nommés et numériques, et un copier-coller en un clic pour les caractères et symboles spéciaux.
Référence des raccourcis clavier
Recherchez les raccourcis par défaut documentés de VS Code, Chrome et Bash avec GNU Readline sous macOS, Windows et Linux.
Générateur de licence
Générez le texte complet des licences open source avec votre nom et l'année remplis. Couvre les licences MIT, Apache 2.0, GPLv3, BSD-3, MPL-2.0 et CC.
Vérificateur d'algorithme de Luhn
Validez les numéros de carte de crédit, IMEI, NAS et autres numéros protégés par Luhn. Retourne un résultat valide ou invalide et montre chaque étape de doublement et de somme.
Convertisseur EM en REM
Convertissez les unités CSS entre em, rem et pixels à n'importe quelle taille de police de base. Montre les étapes de calcul et les tailles de base typiques pour une typographie réactive.
Outil disponible dans d’autres langues
- Công cụ giải mã Protocol Buffers [VI]
- Protocol Buffers-avkodare [SV]
- أداة فك ترميز Protocol Buffers [AR]
- Protocol Buffers 디코더 [KO]
- ตัวถอดรหัส Protocol Buffers [TH]
- Dekoder Protocol Buffers [ID]
- Protocol Buffers デコーダー [JA]
- Protocol-Buffers-Decoder [DE]
- Protocol Buffers-decoder [NL]
- Decodificador de Protocol Buffers [ES]
- Dekoder Protocol Buffers [PL]
- Decodificador de Protocol Buffers [PT]
- Protocol Buffers Decoder [EN]
- Decodificatore Protocol Buffers [IT]
- Декодер Protocol Buffers [RU]
- Protocol Buffers 解码器 [ZH]
- Protocol Buffers Kod Çözücü [TR]