Conversor de texto a hexadecimal
Convierte texto a hexadecimal — sus bytes UTF-8 o UTF-16, con espacios, en array, escapados o en volcado — y lee de nuevo como texto cualquiera de esas formas.
48 6F 6C 61
Una cadena como los bytes en los que se guarda
Toda cadena que un programa maneja es, por debajo, una fila de bytes, y esta página los escribe en hexadecimal, dos dígitos por byte. Escribe Hello y obtienes 48 65 6C 6C 6F, un byte por letra con un espacio detrás de cada uno salvo el último. Pon en cambio la dirección en «Hexadecimal a texto» y pega hexadecimal sacado de un registro, de una base de datos o de un depurador, y recuperas el texto que guardan esos bytes.
Un mismo texto da bytes distintos en codificaciones distintas, y la unidad decide qué son los dígitos de esta página. Empieza en UTF-8, la codificación de la web, donde H es el byte 48 y א los bytes D7 90. UTF-16 LE y UTF-16 BE dedican dos bytes a cada uno de ellos, en órdenes opuestos — 48 00 o 00 48 para H —, mientras que «Puntos de código» prescinde por completo de los bytes y escribe el número que Unicode asigna, U+05D0 para א. La unidad que esté puesta vale tanto para el hexadecimal que lees como para el texto que escribes, y se queda puesta: si el hexadecimal pegado se parece al de otra unidad, la página puede sugerirla, pero solo tu clic la cambia.
Dos dígitos hexadecimales por cada byte
Un byte guarda uno de 256 valores, de 0 a 255. El hexadecimal cuenta de dieciséis en dieciséis, con los dígitos del 0 al 9 y luego de la A a la F para diez a quince, y dieciséis veces dieciséis son 256, así que dos dígitos hexadecimales nombran cualquier byte y nunca hace falta un tercero: 00 es 0, 7F es 127 y FF es 255. H es 72, cuatro veces dieciséis más ocho, así que su byte es 48.
Cada dígito hexadecimal representa exactamente cuatro bits, medio byte: el 4 de 48 es 0100 y el 8 es 1000, y uno junto al otro son los ocho bits de H, 01001000. La página conserva los dos dígitos de cada byte, así que un salto de línea es 0A y un espacio 20, y como cada byte ocupa el mismo ancho, el hexadecimal se puede leer de nuevo sin nada entre los bytes: 4869 es Hi.
Las letras del hexadecimal significan lo mismo en mayúscula o en minúscula. La página escribe mayúsculas salvo que elijas «minúsculas», así que é es C3 A9 o c3 a9, y lee las dos formas, incluso mezcladas en un mismo texto pegado.
Cinco estilos, cada uno pensado para el sitio donde se pega
En hexadecimal, el selector «Estilo» dispone los mismos bytes de cinco maneras, cada una para un sitio al que el hexadecimal va después. Para Hi, los dos bytes 48 y 69:
- «Con espacios» da 48 69, un espacio entre bytes: el más fácil de leer y de contar, y el estilo con el que se abre la página.
- «Compacto» da 4869, los dígitos seguidos, para un campo o un parámetro que recibe un valor como una cadena de dígitos hexadecimales.
- «Array» da 0x48, 0x69, cada byte un número con 0x delante y una coma entre ellos, listo para pegar en un array de bytes en C, C#, JavaScript, Python o Go.
- «Escapado» da \x48\x69, cada byte como \x y sus dos dígitos, tal como se escribe un byte dentro de una cadena de C o de un literal de bytes de Python como b'\x48\x69'.
- «Volcado hexadecimal» dispone los bytes en líneas, con el punto donde empieza cada línea y los mismos bytes como texto al lado: la sección siguiente lee uno.
La lectura acepta los cinco de vuelta, junto con otros formatos que no tocan los bytes: dos puntos como en 48:69, los guiones que escribe BitConverter.ToString de .NET, como en 48-69, 0x o 0X delante de cada byte, y todo lo pegado envuelto una vez entre paréntesis, corchetes o llaves o entre comillas. El estilo y las mayúsculas solo importan al escribir, así que los dos controles desaparecen cuando la dirección es «Hexadecimal a texto».
En «Escapado» hay una trampa. En una cadena de JavaScript, o en una cadena normal de Python y no en un literal de bytes, \x nombra un carácter y no un byte, así que \xD7\x90 son ahí dos caracteres y no la א cuyos bytes UTF-8 son D7 90. Más allá de ASCII, dale los bytes a algo que acepte bytes.
Leer un volcado hexadecimal, columna a columna
Un volcado hexadecimal dispone los bytes a razón de dieciséis por línea, con una columna a cada lado para ayudarte a encontrarlos. Escritos con el estilo «Volcado hexadecimal», Hello, World! y un salto de línea llenan una línea: primero 00000000, el desplazamiento, que es donde está el primer byte de la línea contando desde cero, en ocho dígitos hexadecimales; luego los catorce bytes, ocho y después seis, con un hueco más ancho entre las dos mitades; luego |Hello, World!.|, los mismos bytes como caracteres, con cada byte que no es ASCII imprimible mostrado como un punto, el salto de línea entre ellos. Una última línea contiene solo 0000000E, que es catorce: donde estaría el byte siguiente, y por tanto la longitud. Esa es la disposición que hexdump -C imprime.
- Con «Hexadecimal a texto» elegido y cualquier unidad salvo «Puntos de código», un volcado hexadecimal pegado se lee solo por sus bytes: la columna de texto queda fuera de la lectura, ningún desplazamiento se lee como un byte, y un aviso debajo del resultado dice que la entrada se tomó como un volcado y nombra la disposición.
- Así se leen dos disposiciones: la de hexdump -C, y lo que imprime xxd sin opciones, donde a cada desplazamiento le siguen dos puntos y los bytes van en grupos de cuatro dígitos. El hexadecimal simple que xxd -p imprime no necesita disposición y se lee como cualquier otro hexadecimal.
- hexdump -C imprime una línea con solo * en lugar de las líneas que repiten la de encima, y la página vuelve a rellenar esas líneas a partir del desplazamiento de debajo, así que los bytes vuelven completos.
- Cada desplazamiento después del primero tiene que cuadrar con los bytes de encima, incluida la longitud de la última línea de hexdump -C, y una línea cuyo desplazamiento no cuadra se rechaza ahí en lugar de leerse mal: ahí es donde se nota una línea omitida, un byte perdido o un desplazamiento mal escrito. Lo que no tiene detrás ningún desplazamiento no se puede comprobar, así que un volcado hexadecimal al que le faltan las primeras líneas, o el final de uno sin línea de longitud detrás, ya que xxd no escribe ninguna, se lee como lo que quede.
UTF-16 LE, y por qué uno de cada dos bytes es 00
Windows guarda el texto en UTF-16 con el byte bajo primero, que es UTF-16 LE; en .NET es Encoding.Unicode, y SQL Server almacena un valor NVARCHAR de la misma manera. UTF-16 da dos bytes a cada carácter hasta U+FFFF, y para todo lo que llega hasta U+00FF — las letras inglesas, los dígitos, é y el resto de Latin-1 — el byte alto es 00. Con el byte bajo primero, ese cero cae detrás de cada letra: Hi es 48 00 69 00.
SQL Server muestra un valor VARBINARY como 0x seguido de su hexadecimal, así que un NVARCHAR que contiene Hi, convertido a VARBINARY, se muestra como 0x48006900. Pégalo aquí con UTF-8 elegido y el texto sale como H, un NUL, i y un NUL, y el aviso de debajo dice que uno de cada dos bytes es 00, como ocurre cuando un texto en alfabeto latino se escribe en UTF-16 en lugar de UTF-8, con «Cambiar a UTF-16 LE» al lado. Púlsalo y los mismos bytes se leen como Hi.
UTF-16 BE pone en cambio el byte alto primero, así que ahí Hi es 00 48 00 69, y א, D0 05 en UTF-16 LE, es 05 D0. Los ceros en el primer lugar de cada par hacen que el aviso ofrezca UTF-16 BE. No dice nada en cuanto hay en el texto un carácter más allá de U+00FF, porque el byte alto de ese carácter no es 00, y solo aparece donde uno de cada dos bytes es 00.
Una marca de orden de bytes al principio
Un texto puede empezar por U+FEFF, un carácter que no muestra nada y está ahí para ser una marca de orden de bytes. En UTF-16 sus dos bytes indican el orden de cada par que viene detrás, FF FE para UTF-16 LE y FE FF para UTF-16 BE, y en UTF-8 son los tres bytes EF BB BF, una firma de que el texto es UTF-8, que solo tiene un orden.
La página conserva una marca así en lugar de descartarla. El hexadecimal que empieza con la marca propia de la unidad elegida se lee como un texto que empieza por U+FEFF, y un aviso dice que la marca se conservó, así que volver a escribir ese texto da los mismos bytes, marca incluida. El hexadecimal que empieza con la marca del otro orden de UTF-16, o con una marca de UTF-16 mientras está elegido UTF-8, recibe un aviso de que los bytes empiezan con la marca de otra unidad, junto a un botón que cambia al orden que la marca indica. En cualquier punto después del principio, U+FEFF es un carácter normal y no provoca ningún aviso.
Bytes que no son texto, mostrados como U+FFFD
No toda secuencia de bytes es texto en la unidad elegida: un carácter al que le falta su último byte, un byte suelto como E9, que las páginas de códigos antiguas escriben para é, y un byte sobrante que queda al final de UTF-16 no forman nada. Pero una secuencia mala no echa a perder todo lo pegado: cada una se sustituye por U+FFFD, el carácter de reemplazo, y todo lo demás se lee con normalidad.
Un aviso da entonces cuántas son y nombra la primera por su lugar entre los bytes, por los dígitos que escribiste para ella y por su línea y su columna. Café guardado en Windows-1252, la página de códigos de Windows para el texto de Europa occidental, es 43 61 66 E9, siendo é ahí un solo byte, E9; leído como UTF-8 vuelve como Caf y U+FFFD, y el aviso nombra el byte 4, escrito como E9, en la línea 1, columna 10. En UTF-8 la palabra es 43 61 66 C3 A9.
Cuenta secuencias, no bytes: F0 9F 98, tres de los cuatro bytes de 😀, son un U+FFFD. Y un U+FFFD que de verdad está en el texto, los bytes EF BF BD, se lee como texto y no se cuenta en absoluto, así que el aviso trata siempre únicamente de bytes que no se pudieron leer.
Convertir hexadecimal de nuevo en un archivo
La lectura entrega los bytes además del texto. Con la dirección en «Hexadecimal a texto» y UTF-8, UTF-16 LE o UTF-16 BE elegido, «Descargar» guarda, como un archivo llamado bytes.bin, exactamente los bytes que se leyeron, incluidos los que no eran texto y antes de que se sustituyera ninguno: el trabajo que xxd -r hace con un volcado hexadecimal. No hay «Descargar» para los puntos de código, que no son bytes, ni mientras escribes, cuando lo que te llevas son dígitos.
Así que el hexadecimal de algo que nunca fue texto también vuelve entero. Toda imagen PNG empieza con los ocho bytes 89 50 4E 47 0D 0A 1A 0A; leídos como UTF-8 se muestran como U+FFFD, las letras PNG y cuatro caracteres de control, con un aviso sobre la secuencia que no es texto, y «Descargar» guarda los ocho tal cual. El archivo siempre se llama bytes.bin, ya que los bytes no llevan nombre, así que ponle el suyo, como image.png, una vez guardado.
Adónde ir para un carácter, sus bits o un número
Para saber qué es un carácter — su nombre, su categoría y si es uno de los invisibles —, el Inspector de caracteres Unicode descompone un texto punto de código a punto de código y muestra también los bytes UTF-8 de cada uno.
El Conversor de texto a binario es esta misma página abierta en binario, donde el patrón que UTF-8 sigue se puede leer en los primeros bits de cada byte. Y un número no es un texto: 255 introducido aquí son los dígitos 2, 5 y 5, y por tanto los bytes 32 35 35, mientras que el Conversor de bases numéricas toma 255 como una cantidad y lo escribe en hexadecimal como ff.
Preguntas frecuentes
- ¿Cómo paso de hexadecimal a texto?
- Elige «Hexadecimal a texto», pega el hexadecimal y pon la unidad que corresponde a la codificación en que se escribió: UTF-8 para la mayoría de los textos, UTF-16 LE para hexadecimal sacado de una cadena de Windows o de .NET o de una columna NVARCHAR. Los espacios, comas, dos puntos y guiones entre los bytes, 0x o \x delante de ellos y un envoltorio alrededor de todo se aceptan al leer, igual que las mayúsculas y las minúsculas.
- ¿Por qué hay un NUL entre cada letra de mi texto?
- Lo más probable es que el hexadecimal sea UTF-16 LE leído como UTF-8. UTF-16 LE escribe cada letra inglesa como dos bytes, su valor ASCII y luego 00, y UTF-8 lee cada uno de esos ceros como un carácter propio, NUL. Elige UTF-16 LE, o pulsa el botón de cambio si la página lo ofrece junto a su aviso, y las letras se juntan.
- ¿Por qué las letras acentuadas de mi hexadecimal salen como U+FFFD?
- Lo más probable es que el hexadecimal se escribiera en una página de códigos antigua como Windows-1252, donde é es un solo byte, E9, mientras que en UTF-8 é es C3 A9 y un E9 suelto no es texto. La página lee UTF-8 y UTF-16 y ninguna página de códigos antigua, así que, en lugar de adivinar cuál se quiso usar, muestra cada secuencia así como U+FFFD y dice dónde está la primera. «Descargar» te sigue dando los bytes tal como eran.
- ¿Puedo pegar lo que imprimió xxd o hexdump -C?
- Sí: la disposición de hexdump -C, que es también la que el estilo «Volcado hexadecimal» escribe, y lo que imprime xxd sin opciones. La columna de texto se deja aparte y ningún desplazamiento se lee como un byte, una línea de * se vuelve a rellenar, y un aviso dice cuál de las dos disposiciones se leyó; un desplazamiento que no cuadra con los bytes anteriores detiene la lectura en su línea, porque las líneas ya no concuerdan entre sí. El hexadecimal simple de xxd -p también se lee, como cualquier otro hexadecimal, sin aviso.
- ¿Importa si el hexadecimal está en mayúsculas o en minúsculas?
- No para los bytes: 4A y 4a son el mismo byte, J. La página escribe mayúsculas salvo que elijas «minúsculas», y esa elección abarca los desplazamientos de un volcado hexadecimal además de sus bytes; la lectura acepta cualquiera de las dos, incluso mezcladas en un mismo texto pegado.
- ¿Cómo recupero un archivo a partir de un volcado hexadecimal?
- Elige «Hexadecimal a texto» y UTF-8 o cualquiera de los dos UTF-16, pega el volcado o el hexadecimal simple, y pulsa «Descargar». El archivo que se guarda, bytes.bin, contiene exactamente los bytes leídos de lo que pegaste, sean texto o no, así que «Descargar» hace el trabajo de xxd -r; ponle el nombre que tenía.
- ¿Es seguro pegar hexadecimal de una base de datos de producción o de un registro?
- Sí, en lo que respecta a la conversión. Se hace en tu propio dispositivo, vaya en la dirección que vaya: el hexadecimal que pegas, el texto en que se convierte y cualquier archivo que se guarde con «Descargar» no se envían a ningún sitio.
Herramientas relacionadas
- Conversor de texto a binario
El binario escribe un byte como sus ocho bits, y ahí se lee el patrón de UTF-8: é es C3 A9 aquí y 11000011 10101001 allí, el primer byte empieza por 110 porque la letra ocupa dos y el segundo por 10 porque la continúa. Esta página también ofrece binario; esa página se abre en él.
- Inspector de caracteres Unicode
Descubre exactamente de qué caracteres se compone un texto.
- Conversor de bases numéricas
Escribe 255 en esta página y obtienes tres bytes, uno por cada uno de sus caracteres: 32 35 35. Esa página lee 255 como un número y convierte el valor mismo, que en hexadecimal es ff.
- Base64
Codifica y decodifica Base64, con soporte UTF-8 completo.