Lire les octets du protocole

décodeur Protobuf

Inspectez d’abord les octets bruts ; ajoutez un .proto autonome seulement pour les noms et types déclarés.

décodeur Protobuf

Entrée

Définition .proto facultative

Résultat

Octets et schéma sont traités dans ce navigateur, sans envoi.

Options

Saisissez un message wire ou un varint.

Un décodeur Protobuf devient utile quand un journal contient un message binaire sans définition lisible. Même sans fichier .proto, les numéros de champs, types wire et limites de chaque valeur restent visibles.

Le format filaire Protobuf ne dit pas si un bloc de longueur connue est du texte, des bytes, un sous-message ou des valeurs compactées. Les lectures proposées restent des hypothèses tant que le schéma n’a pas tranché.

Pourquoi utiliser ce décodeur Protobuf ?

Chaque lecture garde sa preuve en hex.

Retrouver chaque champ dans la capture

Le décodeur Protobuf associe à chaque champ ses offsets début et fin à partir de zéro, son type wire et son hex brut. Une longueur tronquée est signalée à l’octet où elle devient impossible.

Un flux d’octets est relié à des champs numérotés et à leurs plages exactes.

Ajouter des noms sans effacer le brut

Collez un .proto autonome et choisissez le type de message. Le JSON typé complète l’arbre des champs bruts, ce qui permet de vérifier l’origine de chaque valeur nommée.

Un arbre de champs bruts est mis en correspondance avec un arbre de valeurs typées.

Trois vérifications avant de conclure

01

Choisir le bon encodage

Hex est sélectionné au départ et accepte espaces, deux-points et préfixes 0x. Passez à Base64 si la capture est encodée ainsi : une courte chaîne peut convenir aux deux formats.

02

Conserver les interprétations possibles

Un varint wire 0 peut désigner un entier signé, non signé, ZigZag, un booléen ou une énumération. Un champ wire 2 peut contenir plusieurs sortes de données. Le .proto fixe le type réel.

03

Vérifier la fraîcheur du résultat

Le calcul automatique attend 350 ms. Désactivez-le pour exécuter avec Ctrl/Cmd + Enter. Toute modification bloque aussitôt copie et téléchargement de l’ancien résultat.

Ce que révèle le message binaire

Quatre types wire courants

Le décodeur Protobuf lit varint, fixed64, données à longueur déterminée et fixed32. Une valeur coupée ou un ancien group déclenche une erreur localisée.

Varint exact sur 64 bits

Le mode varint décode uint64 et fait la conversion inverse depuis un entier décimal. Le choix ZigZag donne sint64 ; BigInt évite toute perte de précision de Number.

JSON suivant une définition locale

Un .proto autonome peut nommer les champs et décoder listes et messages imbriqués. Si ce décodage échoue, l’inspection wire brute reste disponible.

Hex fidèle à la capture

L’export normalise uniquement la présentation des octets d’entrée. Il ne réencode pas un message déduit par supposition, ce qui facilite la comparaison octet par octet.

Ce que le wire ne peut pas prouver

Les noms viennent du schéma
Sans .proto, un décodeur Protobuf connaît les numéros et les types wire, pas les noms originaux, libellés enum ou relations oneof. Il ne les invente pas.
Un texte lisible reste une hypothèse
Des bytes valides en UTF-8 peuvent aussi former un sous-message. Le résultat présente les candidats ; vérifiez la déclaration avant d’en faire une donnée métier.
Un seul .proto autonome
Les imports, URL distantes et dépendances téléchargées ne sont pas pris en charge. Résolvez-les dans le projet puis collez une définition complète.
Pas de couche de transport
Collez le message wire brut, après avoir retiré tout en-tête gRPC ou compression. L’encodage d’un message entier depuis JSON n’est pas fourni.

Questions sur le décodeur Protobuf

Puis-je décoder du protobuf sans le fichier .proto ?

Oui pour la structure : numéros, types wire, offsets et valeurs brutes. Les noms et types déclarés exigent le .proto correspondant.

Que signifient les types filaires de protobuf ?

Les trois bits bas de chaque tag indiquent la forme de stockage. Ils ne suffisent pas à reconnaître tous les types applicatifs.

Dois-je coller le protobuf en hex ou en base64 ?

Choisissez Hex pour des paires de chiffres et Base64 pour une chaîne encodée. Le choix reste manuel afin d’éviter une détection ambiguë.

Pourquoi un varint est-il affiché comme plusieurs nombres différents ?

La même valeur brute peut se lire en entier non signé ou en sint64 ZigZag. Seule la déclaration indique l’interprétation voulue.

La charge utile décodée est-elle téléversée quelque part ?

Non. Les octets et le schéma facultatif sont traités dans ce navigateur, sans envoi du contenu au serveur.

Une définition devrait être prise en charge ?

Revenir au décodeur Protobuf

Gardez les offsets et l’hex brut du décodeur Protobuf à côté du .proto utilisé : cette comparaison évite de confondre une lecture possible avec le type déclaré.