Texto para hexadecimal

Ler um dump de memória, conferir o que um protocolo realmente colocou na rede, desmontar um desafio de CTF: mais cedo ou mais tarde você precisa dos bytes por trás de uma string. Cole um texto e este conversor devolve byte a byte em hexadecimal, separado por espaços como num hexdump (48 65 6c 6c 6f) ou tudo emendado (48656c6c6f). Troque o modo e o caminho se inverte: o hexadecimal colado volta a ser texto legível.

Como o conversor funciona

  1. 1

    Escolha a direção

    Texto para hexadecimal codifica o que você digita. Hexadecimal para texto devolve os caracteres.

  2. 2

    Escolha o separador

    Ao codificar, um único espaço entre os bytes ou nada. São essas as duas opções.

  3. 3

    Cole a sua entrada

    O texto é lido como UTF-8. O hexadecimal pode chegar com prefixos 0x ou \x, vírgulas, espaços ou quebras de linha: tudo isso é removido para você.

  4. 4

    Converta e copie

    O resultado aparece abaixo com um botão de copiar. Nada é baixado.

Por que hexadecimal e não decimal

Um dígito hexadecimal cobre exatamente 4 bits, então dois dígitos cobrem exatamente um byte, sempre. O decimal obriga a fazer conta para saber se um valor ainda cabe (128 está na faixa? e 256?), enquanto o hexadecimal mostra: 00 é o menor byte, ff é o maior, e todo byte no meio tem dois caracteres de largura. É esse alinhamento que faz do hexadecimal a notação dos dumps de memória, das capturas de pacotes, das assinaturas de arquivo e dos códigos de cor.

O que este conversor realmente produz

  • Sempre minúsculo. O codificador escreve 6c, nunca 6C. O hexadecimal não diferencia maiúsculas de minúsculas, então nada se perde, mas se o formato de destino exigir maiúsculas, passe o resultado por um conversor de caixa.
  • Sempre dois dígitos por byte. Uma tabulação é 09, não 9, para que as fronteiras entre bytes continuem contáveis.
  • Espaço ou nada. Esses são os dois únicos separadores. Na codificação não existe prefixo 0x nem \x, então acrescente no seu editor se precisar de strings de escape de C ou Python.
  • UTF-8 do começo ao fim. O texto é medido em bytes, não em caracteres.

Hexadecimal e Unicode

H ocupa um byte em UTF-8, então vira 48. Tudo que sai do ASCII puro ocupa mais:

Caractere Hex UTF-8 Bytes
A 41 1
é c3 a9 2
€ e2 82 ac 3
🚀 f0 9f 9a 80 4

Assim, Hello codifica como 48 65 6c 6c 6f, cinco caracteres e cinco bytes, enquanto café codifica como 63 61 66 c3 a9: quatro caracteres, mas cinco bytes, porque o é precisa de dois. O mesmo vale para o ç (c3 a7) e para o ã (c3 a3). Se uma string curta produz mais pares hexadecimais do que você esperava, esse costuma ser o motivo.

O que o decodificador aceita

Cole qualquer um destes e você recebe Hello de volta:

  • 48 65 6c 6c 6f, no estilo hexdump
  • 48656c6c6f, cru e sem separadores
  • 0x48656c6c6f, no estilo de literal inteiro
  • \x48\x65\x6c\x6c\x6f, escapes de C e de Python
  • 48,65,6C,6C,6F, separado por vírgulas e em qualquer mistura de maiúsculas e minúsculas

Prefixos, vírgulas, espaços, tabulações e quebras de linha são removidos antes de decodificar. O resto não: um hífen em 48-65, um # na frente de um código de cor ou uma letra depois do f interrompem a decodificação, e o mesmo acontece com um número ímpar de dígitos, porque meio byte não vira caractere. Nesses casos a ferramenta não devolve nada em vez de chutar um resultado parcial. Se a área de saída ficar vazia, é aí que você deve procurar.

Cores hexadecimais usam a mesma notação, não o mesmo conteúdo

#ff8800 usa o mesmo sistema de base 16, mas esses três bytes descrevem os canais vermelho, verde e azul, não caracteres. Tire o # e decodifique aqui: você vai receber três bytes crus que não formam texto legível. Para isso, use um seletor de cores.

Perguntas frequentes

Sim. Hexadecimal e base16 são dois nomes para o mesmo sistema: dezesseis dígitos (0 a 9 e a até f), cada um carregando 4 bits.

Nesta ferramenta, não. O codificador escreve sempre em minúsculas. Como o hexadecimal não diferencia caixa, 4f e 4F são o mesmo byte, então passe o resultado por qualquer conversor de caixa se o seu formato exigir. O decodificador lê as duas formas sem reclamar.

O decodificador só aceita os dígitos de 0 a 9 e de a até f, em quantidade par, depois de remover os prefixos 0x e \x, as vírgulas e os espaços. Um hífen, um #, uma letra depois do f ou um dígito faltando deixam a entrada inválida, e a ferramenta prefere um resultado vazio a um errado. Conte os dígitos e procure pontuação perdida.

A maioria dos emojis fica nos planos suplementares do Unicode, que o UTF-8 guarda em quatro bytes. Caracteres ASCII puros continuam com um byte cada, e é por isso que um texto em inglês dá um par por caractere e um texto em português com acentos não.

Não. Este é um campo de texto, então ele trata o que você consegue digitar ou colar. Para dados binários, o base64 é mais compacto e mais fácil de transportar.

Sim. A conversão roda no nosso servidor, então o que você cola viaja junto com a requisição e o resultado volta. Registramos apenas a ação e as opções escolhidas, nunca o texto em si, e o texto não fica guardado depois da resposta. Para material realmente sigiloso, use um conversor que rode offline na sua própria máquina.

Ferramentas relacionadas

Ferramenta disponível em outros idiomas