Cómo convertir un byte array a una cadena hexadecimal en C#: guía completa

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Transformamos bytes en cadenas y viceversa: la magia del código hexadecimal en C#

\n\n

¿Alguna vez te has preguntado cómo ve una computadora una imagen, música o simplemente un archivo de texto? Todo es solo una secuencia de bytes. Pero los bytes no son muy convenientes para mostrar al usuario o transmitir en una URL. Aquí es donde la cadena hexadecimal (hex string) viene al rescate: una representación compacta y legible de datos binarios.

\n\n

Imagina: estás escribiendo un módulo criptográfico, trabajando con hashes, transmitiendo datos binarios a través de JSON o registrando el contenido de un paquete. Y de repente, ¡pum! Necesitas convertir un array de bytes en una cadena comprensible. O viceversa, restaurar los bytes originales a partir de una cadena hex. ¿Te suena familiar? Esta pregunta es una de las más populares en Stack Overflow, y hoy la resolveremos de una vez por todas. Bienvenido a pythonlib.ru — tu guía en el mundo de la programación.

\n\n

¿Por qué convertir un byte array a una cadena hex?

\n\n

Vamos al grano. Un array de bytes (byte[]) son datos sin procesar: números del 0 al 255. Son difíciles de leer para una persona y, en algunos protocolos de texto (HTTP, JSON), incluso pueden romper el formato. La cadena hex resuelve ambos problemas:

\n\n
    \n
  • Compacidad: un byte se convierte en dos caracteres (por ejemplo, 255 → "FF").
  • \n
  • Seguridad: la cadena solo contiene caracteres seguros (0-9, A-F).
  • \n
  • Comodidad: las cadenas hex son fáciles de copiar, comparar y registrar.
  • \n
\n\n

Seguramente has visto estas cadenas en hashes MD5, SHA256 o en tokens de autorización. Ahora sabes cómo funciona "bajo el capó".

\n\n

Método n.º 1: El clásico — BitConverter (simple y rápido)

\n\n

La forma más popular en C# es usar la clase incorporada BitConverter. Está disponible en .NET desde la primera versión y funciona sin complicaciones.

\n\n

Conversión byte[] → cadena hex

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

Muy simple, ¿verdad? Pero hay un detalle: se inserta un guion entre los pares de caracteres. Si el guion te molesta, es fácil eliminarlo:

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

Ventajas: mínimo código, método incorporado, fácil para principiantes.
\nDesventajas: guion adicional (hay que eliminarlo), pequeña asignación de memoria para cadenas intermedias.

\n\n

Conversión inversa: cadena hex → byte[]

\n\n

Con la operación inversa es un poco más complicado. BitConverter solo funciona en una dirección. Pero no nos rendimos: escribamos un analizador simple:

\n\n
public static byte[] HexStringToBytes(string hex)\n{\n    // Eliminamos posibles guiones y espacios\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// Uso:\nstring hex = "0F1AFF00";\nbyte[] result = HexStringToBytes(hex);\n// result: { 0x0F, 0x1A, 0xFF, 0x00 }
\n\n

Este método usa Convert.ToByte con base 16: confiable y legible. Pero para arrays grandes, Substring crea muchas cadenas temporales. Para código de producción, es mejor usar Span<T> o un bucle con indexación de caracteres.

\n\n

Método n.º 2: Moderno — Convert.ToHexString (.NET 5+)

\n\n

A partir de .NET 5, Microsoft agregó el tan esperado método Convert.ToHexString. Funciona rápido y sin guiones.

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

¡Hermoso! Sin guiones, sin Replace. Y para la operación inversa está Co

Blogs

Book Recommendations