Pular para o conteúdo principal

Texto digital

No contexto da computação, texto é uma coleção de caracteres. Uma sequência de caracteres dentro de um mesmo contexto costuma ser chamada de string (do inglês, fio ou corda).

Para armazenar texto em binário, é preciso primeiro definir um conjunto de caracteres e atribuir um código binário único para cada um deles. Esse conjunto é chamado de tabela de caracteres, ou charset.

Para definir quantos bits são necessários, precisamos estimar quantos caracteres queremos representar. Considerando apenas o alfabeto latino sem acentuação (26 letras minúsculas e 26 maiúsculas), os 10 algarismos e pontuações comuns, chegamos a algo em torno de 100 símbolos distintos. Usando a fórmula conhecida:

27=1282^7 = 128

Sete bits já seriam suficientes. Como 7 bits é um número incomum (não é uma potência de 2 inteira nem um múltiplo conveniente de byte), faz mais sentido usar 8 bits, o que nos dá 256 combinações possíveis e ocupa exatamente 1 byte por caractere.

Quanto as combinações de bits, não precisa se preocupar em criar uma, por sorte, já fizeram isso por nós. Não é necessário sequer decora-la, no momento entender seu funcionamento é mais que suficiente. Existem diversos padrões já estabelecidos, vamos explorar alguns.

ASCII - American Standard Code for Information Interchange

O padrão mais antigo e ainda mais influente para representação de texto em computadores é o American Standard Code for Information Interchange, conhecido pela sigla ASCII. Criado em 1963, o ASCII define 128 caracteres usando 7 bits, mas armazenados em 1 byte com o bit mais significativo sempre valendo 0. As abas abaixo mostram alguns exemplos de como as representações são feitas, tanto para caracteres imprimíveis, quanto para os caracteres de controle.


Clique nas abas abaixo para alternar a visualização:

Os caracteres de 32 a 126 são os visíveis: letras maiúsculas e minúsculas, algarismos, pontuações e símbolos comuns. Por exemplo, a letra A é representada pelo valor decimal 65, que em binário é 0b01000001 e em hexadecimal é 0x41. A letra a minúscula é o valor 97, ou 0x61.

Existe uma relação elegante aqui: a diferença entre uma letra maiúscula e sua versão minúscula no ASCII é sempre 32, ou 0x20. Isso facilita imensamente a implementação de funções que convertem entre maiúsculas e minúsculas.

DecimalHexadecimalBinárioSímboloDescrição
320x200b00100000 Espaço
330x210b00100001!Ponto de exclamação
650x410b01000001ALetra A maiúscula
660x420b01000010BLetra B maiúscula
900x5A0b01011010ZLetra Z maiúscula
970x610b01100001aLetra a minúscula
980x620b01100010bLetra b minúscula
1220x7A0b01111010zLetra z minúscula
Dica

Os dígitos de 0 a 9 vão de 0x30 a 0x39 — subtrair 0x30 de qualquer dígito ASCII dá diretamente seu valor numérico. O mesmo padrão vale para letras: A–Z ocupam 0x41 até 0x5A e a–z ocupam 0x61 até 0x7A, com diferença exata de 0x20 entre maiúsculas e minúsculas.

Ou seja, a letra a que ocupa a posição 0x61 menos 0x20 dá exatamente a posição que da sua versão maiúscula A. Para fins de didática é possível interpretar da seguinte forma usando uma formula1:

a162016=Aa_{16} - 20_{16} = A

Footnotes

  1. Eu tirei essa formula da minha cabeça perdão aos matemáticos de plantão.