Este artigo foi publicado originalmente em 27 de setembro de 2013.
Código ASCII é a codificação de caracteres para valores numéricos de 7 bits mais aceita mundialmente e significa American Standard Code for Information Interchange – portanto, nada de ASC-2, por favor.
O ASCII não permite acentos ou diacríticos, apenas os caracteres mais comunse uma série de 33 caracteres de controle. Porém, como a menor palavra binária (sequência de bits) usada é o byte ou octeto, que usa 8 bits, um a mais que o ASCII, é possível criar supersets com o dobro1 da capacidade como, por exemplo, o Latin-1 e o CP-1252.
Para quem está começando a tentar entender o código ASCII, é preciso saberque ele é composto de grupos. O primeiro grupo é o que possui sequência
binária 00xxxxx
, ou seja, zeros nas duas casas da esquerda e
qualquer combinação nas 5 demais. Isso dá uma combinação de 32 caracteres,
com código de 0 (0000000
) a 31 (0011111
), e consiste nos
caracteres de controle, como nulo (0), os caracteres de mudança de linha
(10 e 13), o backspace (8), o escape (27) e o tab (9).
A única exceção de carácter de controle fora dessa sequência é o delete (127 – 1111111
).
O grupo seguinte, 010xxxx
(32 a 47) é uma sequência de caracteres de pontuação e símbolos matemáticos, a começar pelo espaço (32).
Então começam os números, dentro do grupo 011xxxx
. Os números começam em 0110000
(48) e seguem até 0111001
(57). Uma forma fácil
de pensar qual o código de um dígito numérico é somar 48 ao valor do
número. Por exemplo, o código de 7 é (48+7=) 55.
O grupo 011xxxx
segue com mais pontuações e símbolos matemáticos.
O grupo seguinte é o das letras maiúsculas: 10xxxxx
. O primeiro elemento, 64 (1000000
), é o arroba (@
), seguido das letras.
Para saber o código de uma letra é só somar 64 ao índice da letra no
alfabeto. Por exemplo, a letra F
é 6ª letra do alfabeto, portanto
seu código é (64+6=) 70.
Depois do Z
(90), continuam mais pontuações e símbolos matemáticos, terminando com underscore (_
, 95 – 1011111
).
A próxima sequência, começando pela crase, são as letras minúsculas. A sequência é idêntica à anterior, apenas trocando o 6º bit (da direita
pra esquerda) por 1: 11xxxxx
, o que soma 32 ao número, e as letras
coincidem o mesmo código das maiúsculas.
Ou seja, se o código de F
é 70, o código de f
é (70+32=) 102.
Como esperado, a sequência após o z
(122) continua com pontuações e símbolos matemáticos.
Como exemplo, vamos codificar a palavra Kodumaro
:
K = 64 + 11 = 75
o = 64 + 15 + 32 = 111
d = 64 + 4 + 32 = 100
u = 64 + 21 + 32 = 117
m = 64 + 13 + 32 = 109
a = 64 + 1 + 32 = 97
r = 64 + 18 + 32 = 114
o = 64 + 15 + 32 = 111
Kodumaro ≡ 75, 111, 100, 117, 109, 97, 114, 111
Se você preferir, pode pensar em bits (incrívelmente mais simples): o 7º bit (mais à esquerda) é sempre 1
(letra), o 6º é 0
para maiúsculas e 1
para minúsculas, os 5 seguintes são a ordem da
letra no alfabeto:
A = 1 = 00001
B = 2 = 00010
C = 3 = 00011
D = 4 = 00100
E = 5 = 00101
F = 6 = 00110
G = 7 = 00111
H = 8 = 01000
I = 9 = 01001
J = 10 = 01010
K = 11 = 01011
L = 12 = 01100
M = 13 = 01101
N = 14 = 01110
O = 15 = 01111
P = 16 = 10000
Q = 17 = 10001
R = 18 = 10010
S = 19 = 10011
T = 20 = 10100
U = 21 = 10101
V = 22 = 10110
W = 23 = 10111
X = 24 = 11000
Y = 25 = 11001
Z = 26 = 11010
Voltando ao Kodumaro
:
K = (letra)(maiúscula)11ª – 1.0.01011 – 1001011
o = (letra)(minúscula)15ª – 1.1.01111 – 1101111
d = (letra)(minúscula) 4ª – 1.1.00100 – 1100100
u = (letra)(minúscula)21ª – 1.1.10101 – 1110101
m = (letra)(minúscula)13ª – 1.1.01101 – 1101101
a = (letra)(minúscula) 1ª – 1.1.00001 – 1100001
r = (letra)(minúscula)18ª – 1.1.10010 – 1110010
o = (letra)(minúscula)15ª – 1.1.01111 – 1101111
E de fato é assim que é codificado e armazenado:
1001011.1101111.1100100.1110101.1101101.1100001.1110010.1101111
Convertendo em bytes (palavras de 8 bits):
0100101101101111011001000111010101101101011000010111001001101111
1A cada bit que se acrescenta a uma palavra binária, sua quantidade de combinações dobra.