Como funciona a codificação hex
Cada caractere de uma página é armazenado em um ou mais bytes. A codificação hex reescreve esses bytes em base 16, dois caracteres por byte, tornando o fluxo de bytes legível sem ferramentas especiais.
- Codificar o texto em bytes. O modo UTF-8 processa a entrada com
new TextEncoder().encode(text), que retorna umUint8Arrayde valores de byte. O modo Latin-1 pega os oito bits menos significativos de cada unidade de código viacharCodeAt(0) & 0xFF, que é a conversão realizada pelos codecs legados ISO-8859-1. - Renderizar cada byte com dois dígitos hex. Cada byte é mapeado para dois dígitos hex via
byte.toString(16).padStart(2, "0"). O seletor de capitalização escolhe maiúsculas (A-F) ou minúsculas (a-f) nas letras da saída. - Aplicar agrupamento e prefixo. O agrupamento insere um separador entre bytes: um espaço simples, um hífen ou um espaço a cada quatro bytes. O prefixo 0x pode ser adicionado uma vez à string inteira (agrupamento Nenhum) ou por byte (agrupamento Espaço), seguindo as convenções que arrays C e ferramentas de diff binário esperam.
- Decodificar na direção inversa. O modo Hex → Texto remove todos os espaços, hífens e prefixos
0xda entrada, valida os caracteres restantes com/^[0-9a-fA-F]+$/, rejeita strings de comprimento ímpar e reconstrói umUint8Arraya partir de pares de bytes sucessivos. O modo UTF-8 decodifica esse array comnew TextDecoder("utf-8", { fatal: true }); o modo Latin-1 mapeia cada byte paraString.fromCharCode(b). - Modo ao vivo para iteração rápida. O modo ao vivo está ativado por padrão. Cada tecla agenda uma reconversão com debounce de 150 ms, permitindo colar, editar e ver o outro painel atualizar sem clicar no botão Converter.
Por que usar um conversor hex
- Depurar protocolos binários. Formatos de rede como Modbus, DNP3 e CoAP compactam seus cabeçalhos em offsets de byte específicos. Ler um frame capturado em hex exibe cada campo de relance, e converter os mesmos bytes para ASCII revela qualquer payload em texto simples junto ao enquadramento binário.
- Trabalhar com firmware embarcado. Sondas JTAG e SWD reportam conteúdo de memória em hex. Traduzir uma região de memória para ASCII revela strings embutidas (caminhos de arquivo, mensagens de erro, assinaturas de fornecedor) que frequentemente indicam onde no firmware você está.
- Ler capturas de pacotes. Wireshark e tcpdump exibem um painel de bytes que mostra cada pacote em hex à esquerda e ASCII à direita. Converter um trecho aqui permite copiar um blob hex de um relatório de bug ou de um chat e ler o que os bytes dizem sem reimportá-los em uma ferramenta de captura.
- Diffs em nível de byte. Comparar dois arquivos binários frequentemente se resume a identificar quais bytes mudaram. Converter ambos os lados para hex com agrupamento consistente alinha o diff em um editor de texto, onde uma ferramenta de diff integrada pode destacar os bytes alterados.
Aplicações comuns
A conversão hex ↔ ASCII aparece em engenharia reversa, segurança e trabalho embarcado sempre que um fluxo de bytes é mais do que apenas um payload de texto.
- Engenharia reversa: pegue um dump hex de um binário resistente ao strings, identifique sequências que decodificam como ASCII imprimível e use essas strings para se orientar na desmontagem.
- Forense de rede: copie um payload de pacote do Wireshark em hex, cole aqui e leia o texto da camada de aplicação sem exportar toda a captura.
- Manipulação de material criptográfico: uma chave, IV ou tag HMAC frequentemente é transmitida como string hex. Decodificar de volta para bytes confirma que o comprimento corresponde ao algoritmo (16 bytes para AES-128, 32 para AES-256) antes de incluí-lo em uma configuração.
Um exemplo prático
Selecione Texto → Hex, UTF-8, minúsculas, agrupamento Espaço-por-byte, prefixo desativado. Digite Hi: a saída exibe 48 69. Ative o prefixo e mude o agrupamento para Nenhum — a mesma entrada fica 0x4869. Cole o emoji 😀 como entrada e o modo UTF-8 exibe f0 9f 98 80 — quatro bytes para um ponto de código, que é por isso que emojis frequentemente aumentam o tamanho da transmissão. Mude para Hex → Texto e cole 0x48-65-6C 6C 6F: o analisador remove o prefixo, os hífens e os espaços e reconstrói Hello.
FAQ
O que é codificação hex?
Codificação hex (ou hexadecimal) escreve um fluxo de bytes em base 16, dois caracteres ASCII por byte. Cada dígito hex cobre quatro bits, então dois dígitos cobrem um byte de oito bits. O alfabeto vai de 0-9 e depois A-F (ou a-f); a capitalização é apenas uma escolha de apresentação e os decodificadores aceitam ambas. Hex é a forma padrão de escrever bytes brutos em especificações de protocolo, saída de depurador e chaves criptográficas, pois é duas vezes mais compacto que binário e evita os problemas de caracteres não imprimíveis dos bytes brutos em texto.
Por que meu emoji vira 4 bytes em hex?
UTF-8 é uma codificação de comprimento variável. Caracteres ASCII (U+0000 a U+007F) ocupam um byte, suplementos Latin-1 ocupam dois, a maioria dos outros pontos de código BMP ocupa três, e caracteres acima de U+FFFF — incluindo a maioria dos emojis — ocupam quatro. A carinha sorridente 😀 é U+1F600 e codifica para F0 9F 98 80. Se precisar de uma visualização de byte de largura fixa, mude para Latin-1 — mas Latin-1 só cobre os primeiros 256 pontos de código, então qualquer caractere fora desse intervalo não pode fazer a viagem de ida e volta.
Suporta Latin-1 / ISO-8859-1?
Sim. Mude a opção de Codificação de texto para Latin-1 (ISO-8859-1). A codificação pega os oito bits menos significativos de cada unidade de código JavaScript (charCodeAt(0) & 0xFF), o que corresponde ao mapeamento legado de byte único. A decodificação usa String.fromCharCode(byte) para cada byte. Use Latin-1 ao trabalhar com saída de sistemas Windows-1252 mais antigos ou pré-Unicode, onde cada byte representa exatamente um caractere.
A conversão é feita no meu navegador?
Sim. O conversor executa TextEncoder, TextDecoder e um pequeno analisador como uma única página estática. Não há upload, nenhuma chamada de API e nenhuma análise do que você cola — apenas as métricas de carregamento de página padrão compartilhadas em todo o site. Os mesmos bytes hex que você vê aqui são o que um script Node ou uma função Lambda produziria com a mesma entrada.
A conversão hex ↔ ASCII é uma tarefa simples que qualquer pessoa que leia protocolos binários ou firmware embarcado executa várias vezes por dia. Fazê-la em uma aba do navegador, com os mesmos codificadores nativos que Node e V8 já incluem, mantém o trabalho ágil e o fluxo de bytes na sua máquina.