Encodeur / Décodeur VarInt
Valeurs décimales
Sortie VarInt
Détails techniques
Comment fonctionne l’encodeur / décodeur VarInt
Ce que fait l’outil
L’outil VarInt encode des entiers non signés sous forme d’entiers à longueur variable LEB128 de style Protobuf et décode des flux VarInt binaires en listes d’entiers. Chaque valeur est encodée sur 1 à 10 octets selon sa magnitude, le bit de poids fort de chaque octet indiquant si d’autres octets suivent. La sortie est affichée sous forme de tableau d’octets, en hexadécimal ou en Base64 pour une intégration facile dans des tests et des fixtures.
Cas d’usage courants pour les développeurs
Les ingénieurs qui déboguent des charges utiles au format wire Protobuf utilisent l’encodage/décodage VarInt pour inspecter les tags de champs et les valeurs de champs d’entiers non signés sans lancer un runtime Protobuf complet. Les développeurs Bitcoin et d’autres cryptomonnaies analysent des longueurs de script et des nombres de transactions encodés en VarInt. L’outil est également utile lors de la rétro-ingénierie de protocoles binaires personnalisés qui adoptent LEB128 en raison de sa compacité pour les petits nombres.
Formats de données, types ou variantes
LEB128 (Little-Endian Base 128) émet 7 bits de charge utile par octet, le bit de poids fort servant de drapeau de continuation. Les petits nombres (0–127) utilisent un seul octet ; les nombres jusqu’à 16 383 utilisent deux octets ; et ainsi de suite. Les entrées acceptent des nombres décimaux séparés par des espaces, des virgules ou des retours à la ligne. Les sorties sont disponibles en hexadécimal, en Base64 et en notation de tableau d’octets brut. Les entiers signés peuvent être encodés en appliquant d’abord la transformation ZigZag (n << 1) ^ (n >> 31).
Pièges courants et cas limites
La précision des nombres JavaScript plafonne à 2^53 − 1 ; les valeurs au-dessus de Number.MAX_SAFE_INTEGER ne peuvent pas être encodées de manière sûre. Les flux VarInt tronqués (octet terminateur manquant) se décodent partiellement et renvoient une erreur indiquant l’offset. Les nombres négatifs ne peuvent pas être encodés directement — utilisez d’abord l’encodage ZigZag. Évitez de copier des octets VarInt depuis des captures d’écran où le padding Base64 peut avoir été supprimé, car un padding manquant modifie les limites d’octets.
Quand utiliser cet outil plutôt que du code
Utilisez l’outil dans le navigateur pour une inspection rapide des octets wire Protobuf pendant le débogage ou lors de l’écriture de tests. Pour l’encodage en production, utilisez des bibliothèques VarInt natives au langage (`varint` sur npm, `binary.varint` dans encoding/binary de Go, `decode_varint` dans google.protobuf.internal de Python) qui gèrent le streaming, la récupération d’erreurs et la transformation ZigZag en un seul appel.