Cadeias de texto

Se o computador s√≥ entende n√ļmeros, como podemos trabalhar com texto ent√£o? Bem, n√£o se engane, o computador realmente s√≥ entende n√ļmeros. O fato de voc√™ apertar uma tecla no teclado que tem o desenho de um s√≠mbolo do alfabeto utilizado no seu pa√≠s n√£o garante que √© isto que de fato seja enviado para o computador e, naturalmente, n√£o √©. Ao inv√©s disso, cada tecla possui um c√≥digo conhecido como scan code ou make code que √© enviado, entre outras informa√ß√Ķes, pelo barramento de dados do teclado para a placa-m√£e do computador e passa por v√°rios est√°gios at√© chegar ao kernel, o n√ļcleo do sistema operacional. Por exemplo, de acordo com informa√ß√£o contida no site Beyond Logic, o scan code da tecla "A" √© o byte 0x1c.

Ap√≥s receber o scan code da tecla e outros dados, o driver pode adicionar ou modificar valores. √Č o que acontece no Linux, por exemplo. Com o comando abaixo √© poss√≠vel por exemplo analisar os bytes gerados no dispositivo do teclado quando a tecla "A" √© pressionada:

# hd /dev/input/event0
00000000 f1 e7 6e 59 00 00 00 00 6d e6 04 00 00 00 00 00 |..nY....m.......|
00000010 04 00 04 00 1e 00 00 00 f1 e7 6e 59 00 00 00 00 |..........nY....|
00000020 6d e6 04 00 00 00 00 00 01 00 1e 00 01 00 00 00 |m...............|
00000030 f1 e7 6e 59 00 00 00 00 6d e6 04 00 00 00 00 00 |..nY....m.......|
00000040 00 00 00 00 00 00 00 00 f1 e7 6e 59 00 00 00 00 |..........nY....|
00000050 8b 3b 06 00 00 00 00 00 04 00 04 00 1e 00 00 00 |.;..............|
00000060 f1 e7 6e 59 00 00 00 00 8b 3b 06 00 00 00 00 00 |..nY.....;......|
00000070 01 00 1e 00 00 00 00 00 f1 e7 6e 59 00 00 00 00 |..........nY....|
00000080 8b 3b 06 00 00 00 00 00 00 00 00 00 00 00 00 00 |.;..............|
00000090

O simples pressionar de uma tecla gerou 144 (0x90) bytes de dados. Esta é uma especificidade do Linux, que define vários tipos de eventos, cada um com 24 bytes de tamanho. O utilitário evtest interpreta os bytes acima e produz uma saída mais amigável ao pressionarmos a mesma tecla "A":

# evtest /dev/input/event0
Event: time 1500442813.544820, type 4 (EV_MSC), code 4 (MSC_SCAN), value 1e
Event: time 1500442813.544820, type 1 (EV_KEY), code 30 (KEY_A), value 1
Event: time 1500442813.544820, -------------- EV_SYN ------------
Event: time 1500442813.610261, type 4 (EV_MSC), code 4 (MSC_SCAN), value 1e
Event: time 1500442813.610261, type 1 (EV_KEY), code 30 (KEY_A), value 0
Event: time 1500442813.610261, -------------- EV_SYN ------------

Perceba os 6 eventos. Se quiser saber mais sobre como o kernel Linux padroniza e transforma os scan codes enviados pelo teclado para estes valores, basta ler a documentação, mas este não é nosso assunto alvo aqui.

Assim como na entrada de dados pelo teclado, o tratamento da entrada do mouse ou de qualquer outro dispositivo tamb√©m √© num√©rico e, de maneira geral, o computador necessita entender que ao ler um determinado n√ļmero, precisa tomar alguma a√ß√£o, como desenhar o que conhecemos por caractere "a". Para ele √© um n√ļmero, para n√≥s, um s√≠mbolo. Veremos nas se√ß√Ķes a seguir como essa convers√£o se d√°.