Comment convertir un byte array en chaîne hexadécimale en C# : guide complet

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Transformer les octets en chaînes et vice versa : la magie du code hexadécimal en C#

\n\n

Avez-vous déjà réfléchi à la façon dont un ordinateur voit une image, de la musique ou simplement un fichier texte ? Tout cela n'est qu'une séquence d'octets. Mais les octets ne sont pas très pratiques à afficher pour un utilisateur ou à transmettre dans une URL. C'est là qu'intervient la chaîne hexadécimale (hex string) — une représentation compacte et lisible des données binaires.

\n\n

Imaginez : vous écrivez un module cryptographique, vous travaillez avec des hachages, vous transmettez des données binaires via JSON ou vous journalisez le contenu d'un paquet. Et là, soudain ! vous devez transformer un tableau d'octets en une chaîne compréhensible. Ou inversement, restaurer les octets d'origine à partir d'une chaîne hexadécimale. Cela vous semble familier ? Cette question est l'une des plus populaires sur Stack Overflow, et aujourd'hui nous allons l'analyser une fois pour toutes. Bienvenue sur pythonlib.ru — votre guide dans le monde de la programmation.

\n\n

Pourquoi convertir un byte array en chaîne hexadécimale ?

\n\n

Allons droit au but. Un tableau d'octets (byte[]) est une donnée brute : des nombres de 0 à 255. Ils sont difficiles à lire pour un humain, et dans certains protocoles textuels (HTTP, JSON), ils peuvent même casser le format. La chaîne hexadécimale résout les deux problèmes :

\n\n
    \n
  • Compacité : un octet se transforme en deux caractères (par exemple, 255 → "FF").
  • \n
  • Sécurité : seuls des caractères sûrs restent dans la chaîne (0-9, A-F).
  • \n
  • Pratique : les chaînes hexadécimales sont faciles à copier, comparer et journaliser.
  • \n
\n\n

Vous avez sûrement vu de telles chaînes dans les hachages MD5, SHA256 ou dans les jetons d'autorisation. Maintenant, vous savez comment cela fonctionne « sous le capot ».

\n\n

Méthode n°1 : La classique — BitConverter (simple et rapide)

\n\n

La façon la plus populaire en C# est d'utiliser la classe intégrée BitConverter. Elle existe dans .NET depuis la toute première version et fonctionne sans complications inutiles.

\n\n

Conversion byte[] → chaîne hexadécimale

\n\n
byte[] data = { 0x0F, 0x1A, 0xFF, 0x00 };\nstring hexString = BitConverter.ToString(data);\nConsole.WriteLine(hexString); // Sortie : 0F-1A-FF-00
\n\n

Tout est simple, n'est-ce pas ? Mais il y a un détail : un tiret est inséré entre les paires de caractères. Si le tiret vous gêne, il est facile de l'enlever :

\n\n
string hexString = BitConverter.ToString(data).Replace("-", "");\nConsole.WriteLine(hexString); // Sortie : 0F1AFF00
\n\n

Avantages : code minimal, méthode intégrée, compréhensible pour les débutants.
\nInconvénients : tiret superflu (à supprimer), légère allocation mémoire pour les chaînes intermédiaires.

\n\n

Conversion inverse : chaîne hexadécimale → byte[]

\n\n

Pour l'opération inverse, c'est un peu plus compliqué. BitConverter ne fonctionne que dans un sens. Mais nous n'abandonnons pas — écrivons un analyseur simple :

\n\n
public static byte[] HexStringToBytes(string hex)\n{\n    // Supprimer les éventuels tirets et espaces\n    hex = hex.Replace("-", "").Replace(" ", "");\n    int length = hex.Length;\n    byte[] bytes = new byte[length / 2];\n    for (int i = 0; i < length; i += 2)\n    {\n        bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);\n    }\n    return bytes;\n}\n\n// Utilisation :\nstring hex = "0F1AFF00";\nbyte[] result = HexStringToBytes(hex);\n// result : { 0x0F, 0x1A, 0xFF, 0x00 }
\n\n

Cette méthode utilise Convert.ToByte avec la base 16 — fiable et lisible. Mais pour les grands tableaux, Substring crée beaucoup de chaînes temporaires. Pour le code de production, il est préférable d'utiliser Span<T> ou une boucle avec indexation des caractères.

\n\n

Méthode n°2 : Moderne — Convert.ToHexString (.NET 5+)

\n\n

Depuis .NET 5, Microsoft a ajouté la méthode tant attendue Convert.ToHexString. Elle fonctionne rapidement et sans tirets.

\n\n
byte[] data = { 0x0F, 0x1A, 0xFF, 0x00 };\nstring hexString = Convert.ToHexString(data);\nConsole.WriteLine(hexString); // Sortie : 0F1AFF00
\n\n

Magnifique ! Pas de tirets, pas de Replace. Et pour l'opération inverse, il y a Co

Blogs

Book Recommendations