Conversor de texto para binário

Traduza texto para binário — seus bytes UTF-8, oito dígitos cada — e binário de volta para texto, com a linha e a coluna de um caractere fora do lugar.

Entrada
Saída
01001111 01101100 11000011 10100001

Como um texto vira uns e zeros

Um computador guarda o texto como bytes, e um byte são oito bits, cada um deles um 0 ou um 1. Esta página mostra esses bytes a você: digite um texto e cada byte sai como oito dígitos binários, com um espaço entre um byte e o seguinte, ou cole binário e leia o texto que ele forma. Ela funciona nas duas direções, roda inteiramente no seu navegador e abre com um exemplo que já vem convertido.

Os bytes de que um texto é feito dependem da codificação dele, e aqui ela é UTF-8, a menos que você escolha outra, porque UTF-8 é o que as páginas web, os URLs e a maioria dos arquivos de texto contêm. O seletor “Unidade” decide o que um grupo de dígitos representa: um byte de UTF-8, um byte de UTF-16 em qualquer uma das duas ordens de bytes, ou um ponto de código. A unidade que você escolhe vale nas duas direções, e a página nunca a muda por você. Quando o que você cola parece outra unidade, a página diz isso e põe um botão ao lado do aviso, e nada muda até você clicar nele.

Por que cada byte é escrito com oito dígitos

Um bit é um dígito binário, e um byte são oito deles. Oito bits podem ser combinados de 256 maneiras, então um byte guarda um número inteiro de 0, que é 00000000, a 255, que é 11111111. É em bytes que se contam arquivos, memória e redes, e, em qualquer máquina que você provavelmente vá encontrar, um byte tem oito bits; os padrões de rede o chamam de octeto, uma palavra que só pode significar oito.

Os primeiros 128 desses valores são o ASCII, o código das letras do inglês, dos dígitos e da pontuação comum, e 128 valores só precisam de sete bits. Por isso o byte de todo caractere ASCII começa com um 0, e o UTF-8 reserva os bytes que começam com um 1 para tudo o que o ASCII não tem. A página escreve cada byte com os oito dígitos, zeros à esquerda incluídos, também por um motivo prático: bytes de uma mesma largura fixa podem ser lidos de volta sem espaços entre eles, oito dígitos de cada vez.

A letra H, bit a bit

Pegue um H maiúsculo. O ASCII dá a ele o número 72, e 72 como byte é 01001000. Lidas a partir da esquerda, as oito posições valem 128, 64, 32, 16, 8, 4, 2 e 1, e cada 1 soma o valor da posição em que está: este byte tem os uns nas posições que valem 64 e 8, e 64 e 8 somam 72. Um i minúsculo é 105, que é 64, 32, 8 e 1, então Hi sai como 01001000 01101001.

A diferença entre maiúscula e minúscula é um bit. Um h minúsculo é 01101000, o byte do H com a posição que vale 32 ligada, e o mesmo vale para toda letra do alfabeto inglês, porque o ASCII numera cada minúscula exatamente 32 acima da maiúscula correspondente.

O seletor “Base” escreve o mesmo byte de outras formas sem mudá-lo. Com “Decimal” escolhido, H é 72; com “Hexadecimal”, 48; com “Octal”, 110. É um byte escrito de quatro maneiras, e na leitura os dígitos são lidos na base que você tiver escolhido. O Conversor de texto para hexadecimal abre em “Hexadecimal”, onde um byte ocupa dois dígitos em vez de oito.

Por que uma letra além do ASCII ocupa dois bytes ou mais

O ASCII termina em 127. Uma letra acentuada, uma letra do alfabeto cirílico, hebraico ou árabe, um caractere japonês ou coreano e um emoji têm todos pontos de código além dele, e o UTF-8 só escreve um caractere em um único byte quando ele é ASCII, reservando os bytes que começam com um 1 para todo o resto. Por isso cada um deles ocupa dois, três ou quatro bytes, e é no binário que dá para ver isso acontecer, porque os primeiros bits de cada byte dizem que parte de um caractere aquele byte é:

  • 0xxxxxxx é um caractere em um byte: ASCII, com os sete bits do caractere escritos onde estão os x. H é 01001000.
  • 110xxxxx 10xxxxxx é um caractere em dois bytes, para pontos de código até 2.047, o que cobre as letras acentuadas das línguas europeias e os alfabetos cirílico, hebraico e árabe. é se escreve 11000011 10101001, e א, 11010111 10010000.
  • 1110xxxx 10xxxxxx 10xxxxxx são três bytes, para pontos de código até 65.535, onde ficam os kana japoneses e os kanji comuns, o hangul coreano e o símbolo do euro. € é 11100010 10000010 10101100.
  • 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx são quatro bytes, para todo ponto de código além desse, que é onde está a maioria dos emojis.

Um primeiro byte que começa com dois, três ou quatro uns diz quantos bytes tem o caractere que ele abre, e todo byte que dá continuidade a um caractere começa com 10, então nenhum byte do meio de um caractere pode ser tomado pelo início de um. Tire os bits indicadores dos dois bytes de א, o 110 e o 10, e os onze bits que sobram, 10111010000, são o ponto de código da letra, U+05D0, em binário. Com “Hexadecimal” escolhido, os mesmos dois bytes aparecem como D7 90, e o padrão fica embutido nos dígitos; em binário, ele está nos primeiros bits de cada byte.

Quatro bytes para um emoji

😀 é U+1F600, bem além de 65.535, então o UTF-8 o escreve em quatro bytes: 11110000 10011111 10011000 10000000. O primeiro começa com quatro uns, então abre um caractere de quatro bytes, e cada um dos três seguintes começa com 10. O ponto de código dele ocupa dezessete dígitos binários, 11111011000000000, um a mais do que os dezesseis que cabem em um caractere de três bytes; o padrão de quatro bytes tem espaço para vinte e um.

Um emoji que parece um só símbolo pode ser vários pontos de código, e cada um deles é escrito por inteiro. Uma mão acenando com um tom de pele são dois pontos de código e oito bytes. Uma família de quatro são sete pontos de código, quatro pessoas e os três caracteres de junção invisíveis entre elas, e vinte e cinco bytes. Cole um deles na página e conte os grupos.

Por que outro conversor imprime onze dígitos para א

Um conversor que imprime onze dígitos para א, 10111010000, não escreveu os bytes da letra. Escreveu o número que o Unicode dá a ela, o ponto de código U+05D0, que é 1488, como um só número binário, e esse número não é um byte de nada que um arquivo ou uma rede guardem. Uma mensagem escrita assim só pode ser lida de volta por um leitor que faça a mesma suposição.

As duas respostas estão mais próximas do que parecem. Os onze dígitos são exatamente os bits que o UTF-8 distribui pelos dois bytes depois de tirados os bits indicadores, como mostrado acima, então os dois conversores escrevem o mesmo número, e só um deles escreve os bytes que o guardam. Em um caractere ASCII os dois coincidem, a não ser pelos zeros à esquerda, e é por isso que dão a mesma resposta para inglês simples e se separam em quase todo o resto.

Esta página também dá essa resposta, como uma unidade que você escolhe, e não como uma que ela supõe: escolha “Pontos de código” e א é escrito como 10111010000, e lido de volta da mesma forma. Com UTF-8 escolhido, cole uma mensagem que um conversor de pontos de código escreveu em hebraico, russo ou japonês, e os grupos são largos demais para bytes; a página não adivinha, mas diz que os grupos parecem pontos de código e oferece “Mudar para pontos de código”. Um conversor que trabalha com uma unidade de código UTF-16 de cada vez, como faz o charCodeAt do JavaScript, escreve 😀 como dois números de dezesseis dígitos, as metades do par substituto com que o UTF-16 o guarda, e “Pontos de código” lê o par de volta como um só emoji.

Ler binário de volta como texto

Para transformar binário de volta em texto, mude a direção para “Binário para texto” e digite ou cole os dígitos, e a saída é o texto que eles formam. “Usar como entrada” faz isso com um clique, levando a saída para a entrada e invertendo a direção, o que é o jeito mais rápido de conferir uma conversão de ida e volta. Tudo isto é lido como os mesmos bytes:

  • Espaço em branco de qualquer tipo, quebras de linha incluídas, e vírgula, ponto e vírgula, dois pontos ou hífen entre os bytes.
  • Nenhum separador, onde quer que os dígitos se dividam em bytes inteiros de oito, que é como “Compacto”, em “Estilo”, os escreve.
  • Grupos de sete dígitos ou menos, que é como fica um caractere ASCII sem o zero à esquerda: 1001000 1101001 é lido como Hi.
  • Um 0b na frente de um byte, em maiúscula ou minúscula, e um par de colchetes, chaves, parênteses ou aspas em volta de tudo.

Mas a página não adivinha. Qualquer outro caractere, ou um grupo de mais de oito dígitos que não se divida em bytes inteiros, interrompe a leitura, e a página diz isso com a linha e a coluna em que ele está, mostrando a sua própria linha logo abaixo com o lugar marcado. Em uma mensagem longa, essa é a diferença entre um erro de digitação que você consegue encontrar e um texto que está errado em silêncio.

O binário que se lê sem problemas como bytes, mas não é texto UTF-8, é mostrado em vez de recusado. Uma mensagem cortada no meio de um caractere volta com a sequência quebrada mostrada como U+FFFD, o caractere de substituição, e um aviso abaixo da saída diz quantas sequências assim existem e onde começa a primeira: o byte, os dígitos que você colou para ele e a linha e a coluna em que estão.

Binário de um texto e binário de um número

Digite 5 aqui e a resposta é 00110101, não 101. A página escreve o caractere 5, ao qual o ASCII dá o número 53, porque os dígitos de um texto são os bytes que o guardam; 101 é o número cinco escrito em binário, que é outra pergunta com outra resposta. O mesmo vale para 255: digitado aqui, são três caracteres e três bytes, enquanto o número 255 é um só byte, 11111111.

Quando o que você tem é um número e não um texto, como uma contagem, um registro ou um valor que um programa imprimiu, leve-o ao Conversor de bases numéricas: ele converte o próprio valor entre binário, octal, decimal, hexadecimal e outras bases, e, com uma largura fixa, escreve um valor negativo em complemento de dois e mostra cada bit como um bit em que você pode clicar para invertê-lo. Esta página parte dos caracteres de um texto; aquela, de um número.

Perguntas frequentes

Como escrevo o meu nome em binário?
Digite-o no campo de entrada e ele sai um byte de cada vez, oito dígitos por byte, com um espaço entre os bytes. Ada, por exemplo, é 01000001 01100100 01100001. Uma letra com acento, ou de outro alfabeto, ocupa dois bytes ou mais, e um espaço entre dois nomes é um byte por si só, 00100000.
Quantos bits ocupa um caractere?
Em UTF-8, oito para uma letra, um dígito ou um sinal de pontuação do ASCII, dezesseis para uma letra acentuada ou uma letra cirílica, hebraica ou árabe, vinte e quatro para os kana japoneses, os kanji comuns, o hangul coreano e o símbolo do euro, e trinta e dois para a maioria dos emojis. Algo que você vê como um só símbolo pode ser, por baixo, vários pontos de código, e cada um deles ocupa os próprios bits.
Posso colar binário sem espaços entre os bytes?
Sim, onde quer que os dígitos se dividam em bytes inteiros: dezesseis dígitos são dois bytes, e vinte e quatro são três. Um grupo de mais de oito dígitos cujo comprimento não é múltiplo de oito não pode ser dividido sem adivinhar que byte perdeu um dígito, então ele é recusado na linha e na coluna em que está, em vez de ser lido errado.
Por que o meu texto volta com um ponto de interrogação dentro de um losango?
Esse símbolo é U+FFFD, o caractere de substituição, que a página põe onde quer que os bytes não sejam texto UTF-8: o mais comum é que um byte tenha se perdido e um caractere tenha ficado cortado, ou que os bytes simplesmente nunca tenham sido UTF-8. Em vez de recusar a mensagem inteira, a página mostra assim cada sequência quebrada e diz abaixo da saída quantas são e onde começa a primeira, para que você encontre o estrago no que colou.
Por que outro conversor me dá um binário diferente?
O mais provável é que ele escreva o ponto de código de cada caractere em vez dos bytes dele. Os dois coincidem no ASCII, a não ser pelos zeros à esquerda, e diferem além dele: א é 11010111 10010000 aqui e 10111010000 lá. Escolha “Pontos de código” para obter a resposta daquele conversor, ou para ler de volta uma mensagem que ele escreveu.
Por que 5 não é 101 aqui?
Porque um 5 digitado no campo é um caractere, e a página escreve o byte que o guarda, 00110101. O número cinco é 101 em binário; para um número e não um texto, use o Conversor de bases numéricas.
O meu texto é enviado para um servidor?
Não. As duas direções rodam inteiramente no seu navegador, por isso o texto que você digita e o binário que você cola nunca saem do seu dispositivo.

Ferramentas relacionadas

  • Conversor de bases numéricas

    Digite 5 nesta página e você obtém o byte que guarda o caractere 5, 00110101. Aquela página é para um número e não para um texto: ela converte o próprio valor, então cinco vira 101.

  • Conversor de texto para hexadecimal

    O hexadecimal escreve um byte com dois dígitos onde o binário usa oito — Hi é 01001000 01101001 aqui e 48 69 lá —, que é como um despejo mostra os bytes e como o código os escreve. Esta página também oferece hexadecimal; aquela abre nele.

  • Base64

    Codifica e decodifica Base64 — suporte completo a UTF-8.

  • Codificador / decodificador de URL

    Codificação percentual de um valor ou de um URL inteiro, e ao contrário.