Cómo funciona la codificación hex
Cada carácter de una página se almacena como uno o más bytes. La codificación hex reescribe esos bytes en base 16, dos caracteres por byte, de modo que la secuencia de bytes es legible sin herramientas especiales.
- Codificar el texto en bytes. El modo UTF-8 ejecuta la entrada a través de
new TextEncoder().encode(text), que devuelve unUint8Arrayde valores de byte. El modo Latin-1 toma los ocho bits inferiores de cada unidad de código mediantecharCodeAt(0) & 0xFF, que es la conversión que realizan los códecs ISO-8859-1 heredados. - Representar cada byte como dos dígitos hex. Cada byte se mapea a dos dígitos hex mediante
byte.toString(16).padStart(2, "0"). El selector de mayúsculas/minúsculas elige entre mayúsculas (A-F) o minúsculas (a-f) en las letras de salida. - Aplicar agrupación y prefijo. La agrupación inserta un separador entre bytes: un espacio simple, un guión o un espacio cada cuatro bytes. El prefijo 0x puede anteponerse una sola vez a toda la cadena (agrupación Ninguna) o por byte (agrupación Espacio), siguiendo las convenciones que esperan los arrays de C y las herramientas de diff binario.
- Decodificar en sentido inverso. El modo Hex → Texto elimina todos los espacios, guiones y prefijos
0xde la entrada, valida los caracteres restantes contra/^[0-9a-fA-F]+$/, rechaza cadenas de longitud impar y reconstruye unUint8Arraya partir de pares de bytes consecutivos. El modo UTF-8 decodifica ese array connew TextDecoder("utf-8", { fatal: true }); el modo Latin-1 mapea cada byte aString.fromCharCode(b). - Modo en vivo para iteración rápida. El modo en vivo está activado por defecto. Cada pulsación de tecla programa una reconversión con 150 ms de debounce para que puedas pegar, editar y ver el otro panel actualizarse sin hacer clic en el botón Convertir.
Por qué usar un conversor hex
- Depuración de protocolos binarios. Los formatos de red como Modbus, DNP3 y CoAP empaquetan sus cabeceras en offsets de byte específicos. Leer una trama capturada como hex muestra cada campo de un vistazo, y convertir los mismos bytes a ASCII revela cualquier carga útil de texto plano que conviva con el framing binario.
- Trabajo con firmware embebido. Las sondas JTAG y SWD reportan el contenido de la memoria como hex. Traducir una región de memoria a ASCII detecta cadenas embebidas (rutas de archivo, mensajes de error, firmas del fabricante) que suelen indicar exactamente en qué parte del firmware te encuentras.
- Lectura de capturas de paquetes. Wireshark y tcpdump incluyen un panel de bytes que imprime cada paquete como hex a la izquierda y ASCII a la derecha. Convertir un fragmento aquí te permite copiar un blob hex de un informe de error o un chat y leer lo que dicen los bytes sin reimportarlos en una herramienta de captura.
- Diffs a nivel de byte. Comparar dos archivos binarios a menudo se reduce a detectar qué bytes han cambiado. Convertir ambos lados a hex con una agrupación consistente hace que el diff se alinee en un editor de texto, donde una herramienta de diff integrada puede resaltar los bytes modificados.
Aplicaciones comunes
La conversión hex ↔ ASCII aparece en ingeniería inversa, seguridad y trabajo embebido siempre que una secuencia de bytes es más que una simple carga útil de texto.
- Ingeniería inversa: toma un volcado hex de un binario resistente a strings, identifica secuencias que se decodifican como ASCII imprimible, y usa esas cadenas para anclar tu posición en el desensamblado.
- Forense de red: copia el payload de un único paquete de Wireshark como hex, pégalo aquí y lee el texto de la capa de aplicación sin exportar toda la captura.
- Manejo de material criptográfico: una clave, IV o etiqueta HMAC suele transmitirse como cadena hex. Decodificar de vuelta a bytes confirma que la longitud coincide con el algoritmo (16 bytes para AES-128, 32 para AES-256) antes de incorporarla a una configuración.
Un ejemplo práctico
Elige Texto → Hex, UTF-8, minúsculas, agrupación Espacio por byte, prefijo desactivado. Escribe Hi: la salida muestra 48 69. Activa el prefijo y cambia la agrupación a Ninguna y la misma entrada se representa como 0x4869. Pega el emoji 😀 como entrada y el modo UTF-8 muestra f0 9f 98 80 — cuatro bytes para un punto de código, que es por qué los emoji suelen inflar el tamaño de transmisión. Cambia a Hex → Texto y pega 0x48-65-6C 6C 6F: el analizador elimina el prefijo, los guiones y los espacios y reconstruye Hello.
FAQ
¿Qué es la codificación hex?
La codificación hex (o hexadecimal) escribe una secuencia de bytes en base 16, dos caracteres ASCII por byte. Cada dígito hex cubre cuatro bits, por lo que dos dígitos cubren un byte de ocho bits. El alfabeto va de 0-9 a A-F (o a-f); las mayúsculas son simplemente una elección de presentación y los decodificadores aceptan ambas. El hex es la forma estándar de escribir bytes en bruto en especificaciones de protocolo, salida de depuradores y claves criptográficas porque es el doble de compacto que el binario y evita los problemas de caracteres no imprimibles del binario en bruto en texto.
¿Por qué mi emoji se convierte en 4 bytes en hex?
UTF-8 es una codificación de longitud variable. Los caracteres ASCII (U+0000 a U+007F) ocupan un byte, los suplementos Latin-1 ocupan dos, la mayoría de los demás puntos de código BMP ocupan tres, y los caracteres superiores a U+FFFF — incluida la mayoría de los emoji — ocupan cuatro. La cara sonriente 😀 es U+1F600 y se codifica como F0 9F 98 80. Si necesitas una vista de byte de ancho fijo, cambia a Latin-1 — pero Latin-1 solo cubre los primeros 256 puntos de código, por lo que cualquier carácter fuera de ese rango no puede hacer round-trip.
¿Es compatible con Latin-1 / ISO-8859-1?
Sí. Cambia la opción de codificación de texto a Latin-1 (ISO-8859-1). La codificación toma los ocho bits inferiores de cada unidad de código JavaScript (charCodeAt(0) & 0xFF), lo que coincide con el mapeo de byte único heredado. La decodificación usa String.fromCharCode(byte) para cada byte. Usa Latin-1 cuando trabajes con salida de sistemas Windows-1252 antiguos o pre-Unicode donde cada byte representa exactamente un carácter.
¿La conversión se realiza en mi navegador?
Sí. El conversor ejecuta TextEncoder, TextDecoder y un pequeño analizador como una única página estática. No hay subida de archivos, ni llamadas a API, ni analíticas de lo que pegas — solo las métricas estándar de carga de página compartidas en todo el sitio. Los mismos bytes hex que ves aquí son los que produciría un script Node o una función Lambda con la misma entrada.
La conversión hex ↔ ASCII es una tarea pequeña que cualquier persona que lea protocolos binarios o firmware embebido realiza varias veces al día. Hacerlo en una pestaña del navegador, con los mismos codificadores nativos que ya incluyen Node y V8, mantiene el trabajo rápido y la secuencia de bytes en tu máquina.