Conversor de texto a binario
Traduce texto a binario — sus bytes UTF-8, ocho dígitos cada uno — y binario de vuelta a texto, con la línea y la columna de un carácter que no encaja.
01001000 01101111 01101100 01100001
Cómo un texto se convierte en unos y ceros
Un ordenador guarda el texto como bytes, y un byte son ocho bits, cada uno de ellos un 0 o un 1. Esta página te muestra esos bytes: escribe un texto y cada byte sale como ocho dígitos binarios, con un espacio entre un byte y el siguiente, o pega binario y lee el texto que forma. Funciona en las dos direcciones, se ejecuta por completo en tu navegador y se abre con un ejemplo que ya está convertido.
Qué bytes forman un texto depende de su codificación, y aquí es UTF-8 salvo que elijas otra, porque UTF-8 es lo que contienen las páginas web, las URL y la mayoría de los archivos de texto. El selector «Unidad» decide qué representa un grupo de dígitos: un byte de UTF-8, un byte de UTF-16 en cualquiera de los dos órdenes de bytes, o un punto de código. La unidad que elijas vale para las dos direcciones, y la página nunca la cambia por ti. Cuando lo que pegas parece otra unidad, la página lo dice y pone un botón junto al aviso, y nada cambia hasta que lo pulses.
Por qué cada byte se escribe con ocho dígitos
Un bit es un dígito binario, y un byte son ocho de ellos. Ocho bits se pueden combinar de 256 maneras, así que un byte guarda un número entero desde 0, que es 00000000, hasta 255, que es 11111111. En bytes se cuentan los archivos, la memoria y el tráfico de red, y en cualquier máquina con la que probablemente te encuentres un byte tiene ocho bits; los estándares de red lo llaman octeto, una palabra que solo puede significar ocho.
Los primeros 128 de esos valores son ASCII, el código de las letras inglesas, los dígitos y los signos de puntuación habituales, y 128 valores solo necesitan siete bits. Por eso el byte de todo carácter ASCII empieza por 0, y UTF-8 reserva los bytes que empiezan por 1 para todo lo que ASCII no tiene. La página escribe cada byte con sus ocho dígitos, ceros a la izquierda incluidos, también por una razón práctica: los bytes de un mismo ancho fijo se pueden leer de nuevo sin espacios entre ellos, de ocho en ocho dígitos.
La letra H, bit a bit
Toma una H mayúscula. ASCII le da el número 72, y 72 como byte es 01001000. Leídas desde la izquierda, las ocho posiciones valen 128, 64, 32, 16, 8, 4, 2 y 1, y cada 1 suma lo que vale su posición: este byte tiene sus unos en las posiciones que valen 64 y 8, y 64 y 8 suman 72. Una i minúscula es 105, que es 64, 32, 8 y 1, así que Hi sale como 01001000 01101001.
La diferencia entre mayúscula y minúscula es un bit. Una h minúscula es 01101000, el byte de la H con la posición que vale 32 encendida, y lo mismo pasa con cada letra del alfabeto inglés, porque ASCII numera cada minúscula exactamente 32 por encima de su mayúscula.
El selector «Base» escribe el mismo byte de otras formas sin cambiarlo. Con «Decimal» elegido, H es 72; con «Hexadecimal», 48; con «Octal», 110. Es un byte escrito de cuatro maneras, y la lectura toma los dígitos en la base que hayas elegido. El Conversor de texto a hexadecimal se abre en «Hexadecimal», donde un byte ocupa dos dígitos en lugar de ocho.
Por qué una letra más allá de ASCII ocupa dos bytes o más
ASCII termina en 127. Una letra acentuada, una letra del alfabeto cirílico, hebreo o árabe, un carácter japonés o coreano y un emoji tienen todos puntos de código más allá, y UTF-8 escribe un carácter en un único byte solo cuando es ASCII, reservando los bytes que empiezan por 1 para todo lo demás. Así que cada uno de ellos ocupa dos, tres o cuatro bytes, y en binario puedes ver cómo ocurre, porque los primeros bits de cada byte dicen qué parte de un carácter es ese byte:
- 0xxxxxxx es un carácter en un byte: ASCII, con sus siete bits escritos donde están las x. H es 01001000.
- 110xxxxx 10xxxxxx es un carácter en dos bytes, para puntos de código hasta 2047, lo que abarca las letras acentuadas de las lenguas europeas y los alfabetos cirílico, hebreo y árabe. é es 11000011 10101001 y א es 11010111 10010000.
- 1110xxxx 10xxxxxx 10xxxxxx son tres bytes, para puntos de código hasta 65.535, donde están los kana japoneses y los kanji comunes, el hangul coreano y el símbolo del euro. € es 11100010 10000010 10101100.
- 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx son cuatro bytes, para cualquier punto de código más allá de ese, que es donde están la mayoría de los emojis.
Un primer byte que empieza por dos, tres o cuatro unos dice cuántos bytes tiene su carácter, y cada byte que continúa un carácter empieza por 10, así que ningún byte del interior de un carácter puede tomarse por el comienzo de uno. Quita los bits indicadores de los dos bytes de א, el 110 y el 10, y los once bits que quedan, 10111010000, son su punto de código, U+05D0, en binario. Con «Hexadecimal» elegido, los mismos dos bytes se leen D7 90 y el patrón queda fundido en los dígitos; en binario está en los primeros bits de cada byte.
Cuatro bytes para un emoji
😀 es U+1F600, muy por encima de 65.535, así que UTF-8 lo escribe en cuatro bytes: 11110000 10011111 10011000 10000000. El primero empieza por cuatro unos, así que abre un carácter de cuatro bytes, y cada uno de los tres que le siguen empieza por 10. Su punto de código ocupa diecisiete dígitos binarios, 11111011000000000, uno más de los dieciséis que caben en un carácter de tres bytes; el patrón de cuatro bytes tiene sitio para veintiuno.
Un emoji que parece un símbolo puede ser varios puntos de código, y cada uno de ellos se escribe entero. Una mano que saluda con un tono de piel son dos puntos de código y ocho bytes. Una familia de cuatro son siete puntos de código, cuatro personas y los tres caracteres de unión invisibles que hay entre ellas, y veinticinco bytes. Pega uno en la página y cuenta los grupos.
Por qué otro conversor imprime once dígitos para א
Un conversor que imprime once dígitos para א, 10111010000, no ha escrito los bytes de la letra. Ha escrito el número que Unicode le da, su punto de código U+05D0, que es 1488, como un número binario, y ese número no es un byte de nada que un archivo o una red guarden. Un mensaje escrito así solo lo puede leer de vuelta un lector que haga la misma suposición.
Las dos respuestas están más cerca de lo que parece. Los once dígitos son exactamente los bits que UTF-8 reparte entre los dos bytes una vez quitados los bits indicadores, como se muestra más arriba, así que los dos conversores escriben el mismo número, y solo uno de ellos escribe los bytes que lo guardan. En un carácter ASCII los dos coinciden salvo por los ceros a la izquierda, y por eso dan la misma respuesta para el inglés sencillo y se separan en casi todo lo demás.
Esta página también da esa respuesta, como una unidad que eliges y no como una que ella da por supuesta: elige «Puntos de código» y א se escribe como 10111010000, y se lee de vuelta de la misma manera. Con UTF-8 elegido, pega un mensaje que un conversor de puntos de código escribió en hebreo, ruso o japonés, y los grupos son demasiado anchos para bytes; la página no adivina, sino que dice que los grupos parecen puntos de código y ofrece «Cambiar a puntos de código». Un conversor que trabaja con una unidad de código UTF-16 cada vez, como hace charCodeAt de JavaScript, escribe 😀 como dos números de dieciséis dígitos, las mitades del par sustituto con el que UTF-16 lo guarda, y «Puntos de código» lee el par de vuelta como un solo emoji.
Leer binario de vuelta como texto
Para volver a convertir binario en texto, cambia la dirección a «Binario a texto» y escribe o pega los dígitos, y la salida es el texto que forman. «Usar como entrada» lo hace con un clic, pasando la salida a la entrada e invirtiendo la dirección, que es la forma más rápida de comprobar una conversión de ida y vuelta. Todo esto se lee como los mismos bytes:
- Espacio en blanco de cualquier tipo, saltos de línea incluidos, y comas, puntos y comas, dos puntos o guiones entre los bytes.
- Ningún separador en absoluto, allí donde los dígitos se dividen en bytes enteros de ocho, que es como los escribe «Compacto» en «Estilo».
- Grupos de siete dígitos o menos, que es el aspecto de un carácter ASCII sin su cero a la izquierda: 1001000 1101001 se lee como Hi.
- Un 0b delante de un byte, en mayúscula o en minúscula, y un par de corchetes, llaves, paréntesis o comillas alrededor de todo.
Eso sí, la página no adivina. Cualquier otro carácter, o un grupo de más de ocho dígitos que no se divida en bytes enteros, detiene la lectura, y la página lo dice con la línea y la columna donde ocurre, con tu propia línea debajo y el lugar marcado. En un mensaje largo, esa es la diferencia entre una errata que puedes encontrar y un texto que está mal sin avisar.
El binario que se lee sin problemas como bytes pero no es texto UTF-8 se muestra en lugar de rechazarse. Un mensaje cortado en mitad de un carácter vuelve con la secuencia rota mostrada como U+FFFD, el carácter de reemplazo, y un aviso debajo de la salida dice cuántas secuencias así hay y dónde empieza la primera: el byte, los dígitos que pegaste para él y la línea y la columna en que están.
Binario de un texto y binario de un número
Escribe 5 aquí y la respuesta es 00110101, no 101. La página escribe el carácter 5, al que ASCII da el número 53, porque los dígitos de un texto son los bytes que lo guardan; 101 es el número cinco escrito en binario, que es otra pregunta con otra respuesta. Lo mismo pasa con 255: escrito aquí son tres caracteres y tres bytes, mientras que el número 255 es un solo byte, 11111111.
Cuando lo que tienes es un número y no un texto, como un recuento, un registro o un valor que un programa imprimió, llévalo al Conversor de bases numéricas: convierte el valor mismo entre binario, octal, decimal, hexadecimal y otras bases, y con un ancho fijo escribe un valor negativo en complemento a dos y muestra cada bit como uno que puedes pulsar para invertirlo. Esta página parte de los caracteres de un texto; aquella, de un número.
Preguntas frecuentes
- ¿Cómo escribo mi nombre en binario?
- Escríbelo en el campo de entrada y sale byte a byte, ocho dígitos por byte con un espacio entre bytes. Ada, por ejemplo, es 01000001 01100100 01100001. Una letra con acento, o una de otro alfabeto, ocupa dos bytes o más, y un espacio entre dos nombres es un byte en sí mismo, 00100000.
- ¿Cuántos bits ocupa un carácter?
- En UTF-8, ocho para una letra, un dígito o un signo de puntuación de ASCII, dieciséis para una letra acentuada o para una cirílica, hebrea o árabe, veinticuatro para los kana japoneses, los kanji comunes, el hangul coreano y el símbolo del euro, y treinta y dos para la mayoría de los emojis. Algo que ves como un símbolo puede ser por debajo varios puntos de código, y cada uno de ellos ocupa sus propios bits.
- ¿Puedo pegar binario sin espacios entre los bytes?
- Sí, allí donde los dígitos se dividen en bytes enteros: dieciséis dígitos son dos bytes y veinticuatro son tres. Un grupo de más de ocho dígitos cuya longitud no es múltiplo de ocho no se puede dividir sin adivinar qué byte perdió un dígito, así que se rechaza en su línea y columna en lugar de leerse mal.
- ¿Por qué mi texto vuelve con un signo de interrogación dentro de un rombo?
- Ese símbolo es U+FFFD, el carácter de reemplazo, que la página pone allí donde los bytes no son texto UTF-8: lo más frecuente es que se perdiera un byte y un carácter quedara cortado, o que los bytes nunca fueran UTF-8 en absoluto. En lugar de rechazar todo el mensaje, la página muestra así cada secuencia rota y dice debajo de la salida cuántas hay y dónde empieza la primera, para que puedas encontrar el daño en lo que pegaste.
- ¿Por qué otro conversor me da un binario distinto?
- Lo más probable es que escriba el punto de código de cada carácter en lugar de sus bytes. Los dos coinciden en ASCII salvo por los ceros a la izquierda, y difieren más allá: א es 11010111 10010000 aquí y 10111010000 allí. Elige «Puntos de código» para obtener la respuesta de ese conversor, o para leer de vuelta un mensaje que escribió.
- ¿Por qué 5 no es 101 aquí?
- Porque un 5 escrito en el campo es un carácter, y la página escribe el byte que lo guarda, 00110101. El número cinco es 101 en binario; para un número y no un texto, usa el Conversor de bases numéricas.
- ¿Se envía mi texto a un servidor?
- No. Las dos direcciones se ejecutan por completo en tu navegador, así que el texto que escribes y el binario que pegas nunca salen de tu dispositivo.
Herramientas relacionadas
- Conversor de bases numéricas
Escribe 5 en esta página y obtienes el byte que guarda el carácter 5, 00110101. Esa página es para un número y no para un texto: convierte el valor mismo, así que cinco sale como 101.
- Conversor de texto a hexadecimal
El hexadecimal escribe un byte con dos dígitos donde el binario usa ocho — Hi es 01001000 01101001 aquí y 48 69 allí —, que es como un volcado muestra los bytes y como los escribe el código. Esta página también ofrece hexadecimal; esa página se abre en él.
- Base64
Codifica y decodifica Base64, con soporte UTF-8 completo.
- Codificador / decodificador de URL
Codifica en porcentaje un valor o una URL entera, y al revés.