sexta-feira, 27 de setembro de 2013

Introdução ao código ASCII (para iniciantes)

Atualizado no blog novo.

Glider 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 comuns e uma série de 33 caracteres de controle. Porém, como a menor palavra binária (sequência de bits) usada é o byte, 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 saber que ele é composto de grupos. O primeiro grupo é o que possui sequência binária 00xxxxx, ou seja, dois zeros nas primeiras casas e qualquer combinação nas 5 seguintes. 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).

Há uma exceção, um carácter de controle perdido 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 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.

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.

Exemplo

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ível, mas é mais simples): o 7º bit (1º da esquerda) é sempre 1 (letra), o 6º (2º da esquerda) é 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

Ou melhor, em bytes:
0100101101101111011001000111010101101101011000010111001001101111


[]’s
Cacilhας, La Batalema


1A cada bit que se acrescenta a uma palavra binária, sua quantidade de combinações dobra.
blog comments powered by Disqus