ASCII

American Standard Code for Information Interchange

ASCII 7-bits

Computadores trabalham com nĂșmeros, mas humanos trabalham tambĂ©m com texto. Sendo assim, houve a necessidade de criar um padrĂŁo de representação textual - e tambĂ©m de controle, que vocĂȘ entenderĂĄ a seguir.

O American Standard Code for Information Interchange, ou em portuguĂȘs, CĂłdigo PadrĂŁo Americano para o IntercĂąmbio de Informação, Ă© uma codificação criada nos EUA (como o nome sugere), jĂĄ que o berço da computação foi basicamente lĂĄ.

Na Ă©poca em que foi definido, lĂĄ pela dĂ©cada de 60, foi logo usado em equipamentos de telecomunicaçÔes e tambĂ©m nos computadores. Basicamente Ă© uma tabela que relaciona um nĂșmero de 7 bits com sinais de controle e caracteres imprimĂ­veis. Por exemplo, o nĂșmero 97 (0b1100001) representa o caractere 'a', enquanto 98 (0b1100010) Ă© o 'b'. Perceba que tais nĂșmeros nĂŁo excedem os 7 bits, mas como em computação falamos quase sempre em bytes, entĂŁo acaba que um caractere ASCII possui 8 bits mas sĂł usa 7. A tabela ASCII vai de 0 a 127 e pode ser encontrada no ApĂȘndice, que vocĂȘ deve consultar agora.

HĂĄ vĂĄrios testes interessantes que vocĂȘ pode fazer para entender melhor as strings ASCII. Ao saber que o caractere 'a' Ă© o nĂșmero 97, vocĂȘ pode usar a função chr() no Python, por exemplo:

>>> print chr(97)
a

Ou no prĂłprio shell do Linux, o comando echo:

$ echo -ne \\x61 # 0x61 em hexa Ă© 97 em decimal!
a

Viu? Quando vocĂȘ digita 'a', o computador entende o byte 0x61. De forma anĂĄloga, quando um programa que exibe um texto na tela encontra o byte 0x61, ele exibe 'a'. Como vocĂȘ pode ver na tabela ASCII, todas as letras do alfabeto americano estĂŁo lĂĄ, entĂŁo Ă© razoĂĄvel concluir que uma frase inteira seja na verdade uma sequĂȘncia de bytes onde cada um deles estĂĄ dentro da faixa da tabela ASCII. Isso fica facilmente visualizĂĄvel no shell do Linux com o comando hd(hexdump):

$ echo 'Acesse mentebinaria.com.br' | hd
00000000 41 63 65 73 73 65 20 6d 65 6e 74 65 62 69 6e 61 |Acesse mentebina|
00000010 72 69 61 2e 63 6f 6d 2e 62 72 0a |ria.com.br.|

É exatamente assim que um texto ASCII vai parar dentro de um programa ou arquivo.

Agora olhe novamente a tabela e perceba o seguinte:

  • O primeiro sinal Ă© o NUL, tambĂ©m conhecido como null ou nulo. É o byte 0.

  • Outro byte importante Ă© 0x0a, conhecido tambĂ©m por \n, line feed, LF ou simplesmente "caractere de nova linha".

  • O MS-DOS e o Windows utilizam na verdade dois caracteres para delimitar uma nova linha. Antes do 0x0a, temos um 0x0d, conhecido tambĂ©m por \r, carriage return ou CR. Essa dupla Ă© tambĂ©m conhecida por CrLf.

  • O caractere de "espaço em branco" Ă© o 0x20.

  • Os dĂ­gitos vĂŁo de 0x30 a 0x39.

  • As letras maiĂșsculas vĂŁo de 0x41 a 0x5a.

  • As letras minĂșsculas vĂŁo de 0x61 a 0x7a.

Agora, algumas relaçÔes:

  • Se somarmos 0x20 ao nĂșmero ASCII equivalente de um caractere maiĂșsculo, obtemos o nĂșmero equivalente do caractere minĂșsculo em questĂŁo.

  • Se diminuirmos 0x30 de um dĂ­gito, temos o equivalente numĂ©rico do dĂ­gito. Ex.: 0x35 - 0x30 = 5.

Sabe quando no Linux vocĂȘ dĂĄ um cat num arquivo que nĂŁo Ă© de texto e vĂĄrios caracteres "doidos" aparecem na tela enquanto vocĂȘ escuta alguns beeps? Esses sons sĂŁo os bytes 0x07 encontrados no arquivo. Experimente! ;-)

ASCII extendida

A tabela ASCII padrĂŁo de 7 bits Ă© limitada ao idioma inglĂȘs no que diz respeito ao texto. Perceba que uma simples letra 'a' com sinal indicativo de crase Ă© impossĂ­vel nesta tabela. Sendo assim, ela foi estendida e inteligentemente passou-se a utilizar o Ășltimo bit do byte que cada caractere ocupa, tornando-se assim uma tabela de 8 bits, que vai de 128 a 255 (em decimal).

Essa extensĂŁo da tabela ASCII varia de acordo com a codificação utilizada. Isso acontece porque ela foi criada para permitir texto em outros idiomas, mas somente 128 caracteres a mais nĂŁo sĂŁo suficientes para representar os caracteres de todos os idiomas existentes. A codificação mais conhecida Ă© a ISO-8859-1, tambĂ©m chamada de Latin-1, que vocĂȘ vĂȘ no ApĂȘndice B.

Outro nome para ASCII é US-ASCII. Alguns textos referem-se a texto em ASCII como ANSI strings também.