AZ Tools
← Guias

Bases numéricas e codificações de texto: um guia rápido para desenvolvedores

Números e texto acabam virando a mesma coisa dentro de um computador: bits. Mas os desenvolvedores trocam constantemente entre representações amigáveis para humanos e para máquinas — códigos de cor em hexadecimal, tokens em Base64, strings de consulta com escape de URL. Este guia é um mapa prático das bases e codificações que você encontra todo dia, e para que cada uma serve.

Bases numéricas: o mesmo valor, roupas diferentes

Uma 'base' é simplesmente quantos dígitos distintos um sistema posicional usa antes de avançar para a próxima casa. O decimal (base 10) usa 0–9; o binário (base 2) usa 0 e 1; o octal (base 8) usa 0–7; o hexadecimal (base 16) usa 0–9 e depois A–F. O número em si não muda entre as bases — só muda como é escrito. 11111111 em binário, 377 em octal, 255 em decimal e FF em hexadecimal são exatamente o mesmo valor.

O hexadecimal é popular entre programadores porque um dígito hexadecimal corresponde exatamente a quatro bits (um nibble), então dois dígitos hexadecimais são exatamente um byte. Isso faz do hexadecimal um jeito compacto e sem perdas de ler binário cru — por isso cores (#FF8800), endereços de memória e dumps de bytes são escritos assim.

Convertendo entre bases

Essas conversões são puramente mecânicas — exatamente o tipo de coisa que uma ferramenta deve fazer por você — mas conhecer o formato da operação ajuda a conferir um resultado e a entender o que os prefixos 0x, 0o e 0b significam no código.

  • Binário ↔ hexadecimal: agrupe os bits de quatro em quatro a partir da direita; cada grupo de quatro é um dígito hexadecimal (1010 1100 = AC).
  • Qualquer base → decimal: multiplique cada dígito pelo seu valor posicional (a base elevada à posição) e some.
  • Decimal → qualquer base: divida repetidamente pela base; os restos, lidos do último ao primeiro, são os dígitos.

De caracteres a bytes: UTF-8

Texto não é byte até você codificá-lo. Um conjunto de caracteres atribui a cada caractere um número (um 'ponto de código') — o Unicode é o universal — e uma codificação decide como esses números viram bytes. O UTF-8 é a codificação dominante na web: caracteres ASCII ocupam um byte, e os demais de dois a quatro, o que mantém o texto em inglês compacto enquanto representa todos os sistemas de escrita e emojis.

É por isso que o comprimento de uma string em caracteres e em bytes pode diferir: 'café' tem quatro caracteres, mas cinco bytes em UTF-8, porque o é precisa de dois. Hashing, limites de tamanho e formatos binários se importam com bytes, então a distinção importa na prática.

Base64: bytes como texto seguro

O Base64 faz o trabalho oposto: transforma bytes arbitrários numa string de 64 caracteres seguros (A–Z, a–z, 0–9, mais + e /). Ele existe porque muitos sistemas — e-mail, JSON, URLs, URIs data: de HTML — foram feitos para texto e podem corromper binário cru. O Base64 permite transportar uma imagem ou uma chave intactas por um canal só de texto.

O custo é o tamanho: o Base64 codifica cada 3 bytes como 4 caracteres, então a saída fica cerca de 33% maior que a entrada. É codificação, não criptografia — qualquer um pode decodificar — então protege contra corrupção no transporte, nunca contra olhos curiosos.

Codificação de URL e por porcentagem

URLs têm suas próprias regras. Caracteres com significado especial numa URL (espaços, &, ?, #, /) precisam ser 'codificados por porcentagem' como um % seguido do seu valor de byte em hexadecimal — um espaço vira %20, um e-comercial vira %26. É isso que permite a uma string de consulta carregar texto arbitrário sem quebrar o endereço.

A codificação por porcentagem opera sobre os bytes UTF-8 de um caractere, o que amarra tudo: texto vira pontos de código, pontos de código viram bytes UTF-8, e bytes viram pares %XX. A maioria dos bugs de codificação que os desenvolvedores enfrentam vem de confundir uma dessas camadas com outra.

Ferramentas relacionadas