§

Options

Mode
Groupement hex
Préfixe 0x
Casse
Encodage du texte
§

Entrée

§

Sortie

Chez Crédit Agricole, les équipes en charge de la modernisation du cœur bancaire migrent des données COBOL encodées en EBCDIC vers des systèmes UTF-8 : chaque champ alphanumérique de mainframe transite par une table de correspondance octet à octet, et les ingénieurs vérifient chaque conversion en comparant les séquences hex source et cible. Un convertisseur hex ↔ ASCII directement dans le navigateur leur permet de valider une valeur isolée — montant, libellé, code IBAN — sans soumettre de données clients à un service distant, en conformité avec les exigences RGPD applicables aux établissements de crédit.

Comment fonctionne l'encodage hex

Chaque caractère d'une page est stocké sous forme d'un ou plusieurs octets. L'encodage hex réécrit ces octets en base 16, deux caractères par octet, rendant le flux d'octets lisible sans outils particuliers.

  1. Encoder le texte en octets. Le mode UTF-8 traite l'entrée via new TextEncoder().encode(text), qui retourne un Uint8Array de valeurs d'octets. Le mode Latin-1 prend les huit bits de poids faible de chaque unité de code via charCodeAt(0) & 0xFF, ce qui correspond à la conversion effectuée par les codecs ISO-8859-1 hérités.
  2. Afficher chaque octet en deux chiffres hex. Chaque octet est converti en deux chiffres hex via byte.toString(16).padStart(2, "0"). Le sélecteur de casse choisit les majuscules (A-F) ou les minuscules (a-f) pour les lettres de sortie.
  3. Appliquer le groupement et le préfixe. Le groupement insère un séparateur entre les octets : un espace, un tiret ou un espace tous les quatre octets. Le préfixe 0x peut être ajouté une fois à toute la chaîne (groupement Aucun) ou par octet (groupement Espace), selon les conventions attendues par les tableaux C et les outils de diff binaire.
  4. Décoder en sens inverse. Le mode Hex → Texte supprime tous les espaces, tirets et préfixes 0x de l'entrée, valide les caractères restants contre /^[0-9a-fA-F]+$/, rejette les chaînes de longueur impaire, et reconstruit un Uint8Array à partir de paires d'octets successives. Le mode UTF-8 décode ce tableau avec new TextDecoder("utf-8", { fatal: true }) ; le mode Latin-1 mappe chaque octet sur String.fromCharCode(b).
  5. Mode en direct pour itérer rapidement. Le mode en direct est activé par défaut. Chaque frappe planifie une reconversion avec un anti-rebond de 150 ms, vous permettant de coller, modifier et voir l'autre volet se mettre à jour sans cliquer sur le bouton Convertir.

Pourquoi utiliser un convertisseur hex

  • Débogage des protocoles binaires. Les formats filaires comme Modbus, DNP3 et CoAP placent leurs en-têtes dans des décalages d'octets précis. Lire une trame capturée en hex montre chaque champ en un coup d'œil, et convertir les mêmes octets en ASCII révèle toute charge utile en clair nichée dans la trame binaire.
  • Travail avec le firmware embarqué. Les sondes JTAG et SWD rapportent le contenu de la mémoire en hex. Traduire une région mémoire en ASCII permet de repérer les chaînes incorporées (chemins de fichiers, messages d'erreur, signatures fournisseurs) qui indiquent souvent où l'on se trouve dans le firmware.
  • Lecture des captures de paquets. Wireshark et tcpdump affichent tous deux un volet d'octets qui imprime chaque paquet en hex à gauche et en ASCII à droite. Convertir un extrait ici permet de copier un bloc hex depuis un rapport de bug ou un fil de discussion et de lire ce que les octets disent réellement, sans réimporter dans un outil de capture.
  • Diffs au niveau octet. Comparer deux fichiers binaires revient souvent à repérer quels octets ont changé. Convertir les deux côtés en hex avec un groupement cohérent aligne le diff dans un éditeur de texte, où un outil de diff intégré peut mettre en évidence les octets modifiés.

Applications courantes

La conversion hex ↔ ASCII intervient dans la rétro-ingénierie, la sécurité et le travail embarqué dès qu'un flux d'octets est plus qu'une simple charge utile textuelle.

  • Rétro-ingénierie : prenez un dump hex d'un binaire résistant aux outils strings, identifiez les séquences qui se décodent en ASCII imprimable, et utilisez ces chaînes pour vous repérer dans le désassemblage.
  • Forensique réseau : copiez le contenu d'un paquet depuis Wireshark en hex, collez-le ici, et lisez le texte applicatif sans exporter toute la capture.
  • Manipulation de matériel cryptographique : une clé, un IV ou un tag HMAC est souvent transmis sous forme de chaîne hex. Décoder vers les octets confirme que la longueur correspond à l'algorithme (16 octets pour AES-128, 32 pour AES-256) avant de l'intégrer dans une configuration.

Un exemple concret

Choisissez Texte → Hex, UTF-8, minuscules, groupement Espace entre chaque octet, préfixe désactivé. Tapez Hi : la sortie affiche 48 69. Activez le préfixe et passez le groupement sur Aucun, la même entrée donne 0x4869. Collez l'emoji 😀 en entrée et le mode UTF-8 affiche f0 9f 98 80 — quatre octets pour un point de code, ce qui explique pourquoi les emojis augmentent souvent la taille de transmission. Passez en Hex → Texte et collez 0x48-65-6C 6C 6F : l'analyseur supprime le préfixe, les tirets et les espaces pour reconstruire Hello.

FAQ

Qu'est-ce que l'encodage hex ?

L'encodage hex (ou hexadécimal) écrit un flux d'octets en base 16, deux caractères ASCII par octet. Chaque chiffre hex couvre quatre bits, donc deux chiffres couvrent un octet de huit bits. L'alphabet va de 0 à 9 puis de A à F (ou a à f) ; la casse est purement une question de présentation et les décodeurs acceptent les deux formes. Le hex est la façon standard d'écrire des octets bruts dans les spécifications de protocoles, la sortie des débogueurs et les clés cryptographiques, car il est deux fois plus compact que le binaire et évite les problèmes de caractères non imprimables des octets bruts en texte.

Pourquoi mon emoji devient-il 4 octets en hex ?

UTF-8 est un encodage à longueur variable. Les caractères ASCII (U+0000 à U+007F) tiennent en un octet, les suppléments Latin-1 en deux, la plupart des autres points de code du BMP en trois, et les caractères au-delà de U+FFFF — dont la plupart des emojis — en quatre. Le visage souriant 😀 est U+1F600 et s'encode en F0 9F 98 80. Si vous avez besoin d'une vue à largeur fixe, passez en Latin-1 — mais Latin-1 ne couvre que les 256 premiers points de code, donc tout caractère hors de cette plage ne peut pas faire un aller-retour.

Prend-il en charge Latin-1 / ISO-8859-1 ?

Oui. Passez l'option Encodage du texte sur Latin-1 (ISO-8859-1). L'encodage prend les huit bits de poids faible de chaque unité de code JavaScript (charCodeAt(0) & 0xFF), ce qui correspond au mappage octet unique hérité. Le décodage utilise String.fromCharCode(byte) pour chaque octet. Utilisez Latin-1 lorsque vous travaillez avec des données issues de systèmes Windows-1252 ou pré-Unicode où chaque octet représente exactement un caractère.

La conversion s'effectue-t-elle dans mon navigateur ?

Oui. Le convertisseur exécute TextEncoder, TextDecoder et un petit analyseur sur une page statique unique. Il n'y a aucun téléversement, aucun appel API, et aucune analyse de ce que vous collez — seules les métriques de chargement de page standard partagées sur tout le site. Les mêmes octets hex que vous voyez ici sont ceux qu'un script Node ou une fonction Lambda produirait sur la même entrée.

La conversion hex ↔ ASCII est une petite tâche que quiconque lit des protocoles binaires ou du firmware embarqué effectue plusieurs fois par jour. La réaliser dans un onglet de navigateur, avec les mêmes encodeurs natifs déjà intégrés à Node et V8, maintient le travail rapide et le flux d'octets sur votre machine.