Struktura ASCII-ja
ASCII (1963, revidiran 1967) je 7-bitni kod: 128 vrednosti, od kojih su 33 kontrolni znakovi, a 95 ispisivi. Njegov raspored je projektovan za mehaničke teleprintere i hardver koji barata bitovima, i taj dizajn se i dalje vidi:
- Veličina slova je jedan bit.
Aje 0x41,aje 0x61: razlikuju se samo u bitu 5 (vrednost 32).c | 0x20pretvara slovo u malo,c & ~0x20u veliko, ac ^ 0x20ga prebacuje. - Cifre su svoja vrednost plus 48.
'7' - '0'je 7, a donji nibl koda cifre je sama cifra (0x37 → 7). - Ctrl briše dva bita. Ctrl-C šalje 0x03 jer je C 0x43, a terminal briše bitove 6 i 5 (
c & 0x1F). Zato je Ctrl-D EOT (4), Ctrl-H backspace (8), Ctrl-I tab (9), Ctrl-M povratak na početak reda (13), Ctrl-[ Escape (27), a Ctrl-@ NUL. - DEL je 127, svih sedam bitova postavljeno, jer je bušenje svake rupe na papirnoj traci bio način da se znak obriše.
Iznad 127
Ne postoji „prošireni ASCII“. Bajtovi 128–255 značili su različite znakove u svakoj kodnoj strani (Latin-1, Windows-1252, CP437, KOI8-R, ISO-8859-2 za srpsku latinicu), što je izvor iskvarenog teksta poput „é“ umesto „é“. Unicode ih je sve zamenio; UTF-8 zadržava bajtove 0–127 identične ASCII-ju, a iznad toga koristi 2–4 bajta. Unicode inspektor prikazuje te bajtove.
Završeci redova
Unix završava redove sa LF (10); Windows sa CR LF (13 10); klasični Mac OS koristio je samo CR. Teleprinterima je trebalo oboje: povratak na početak reda da vrati glavu, novi red da pomeri papir. \r\n u shebang liniji shell skripte i dalje je najčešći uzrok grešaka „bad interpreter“.
Pitanja
Koji je ASCII kod za A?
65 decimalno, 0x41 heks, 0101 oktalno, 01000001 binarno. Malo a je 97 (0x61).
Šta su ASCII 10 i 13?
10 je LF (line feed, \n), a 13 je CR (carriage return, \r). Unix koristi samo LF; Windows koristi CR LF.
Zašto Ctrl-C šalje 3?
Terminali brišu dva visoka bita koda slova: C je 0x43 = 0100 0011, a 0x43 & 0x1F = 3 (ETX, kraj teksta). Školjka mapira ETX na SIGINT.
Da li je 0xFF ili 255 ASCII?
Ne. ASCII se završava na 127. 128–255 zavise od kodne strane, a u UTF-8 te vrednosti bajtova se javljaju samo kao delovi višebajtnih znakova.