Der Aufbau von ASCII
ASCII (1963, überarbeitet 1967) ist ein 7-Bit-Code: 128 Werte, davon 33 Steuerzeichen und 95 druckbare. Sein Layout wurde für mechanische Fernschreiber und bitverdrehende Hardware entworfen, und das sieht man noch:
- Groß/Klein ist ein Bit.
Aist 0x41,aist 0x61: Sie unterscheiden sich nur in Bit 5 (Wert 32).c | 0x20macht einen Buchstaben klein,c & ~0x20groß, undc ^ 0x20wechselt. - Ziffern sind ihr Wert plus 48.
'7' - '0'ist 7, und das untere Nibble des Codes einer Ziffer ist die Ziffer selbst (0x37 → 7). - Strg löscht zwei Bits. Strg-C sendet 0x03, weil C 0x43 ist und das Terminal die Bits 6 und 5 löscht (
c & 0x1F). Deshalb ist Strg-D EOT (4), Strg-H Rückschritt (8), Strg-I Tabulator (9), Strg-M Wagenrücklauf (13), Strg-[ Escape (27) und Strg-@ NUL. - DEL ist 127, alle sieben Bits gesetzt, weil man ein Zeichen auf Lochstreifen löschte, indem man jedes Loch stanzte.
Jenseits von 127
Es gibt kein „erweitertes ASCII“. Die Bytes 128–255 bedeuteten in jeder Codepage andere Zeichen (Latin-1, Windows-1252, CP437, KOI8-R, ISO-8859-2 für Mitteleuropa), was die Quelle von Zeichensalat wie „é“ für „é“ ist. Unicode hat sie alle ersetzt; UTF-8 hält die Bytes 0–127 identisch zu ASCII und nutzt darüber 2–4 Bytes. Der Unicode-Inspektor zeigt diese Bytes.
Zeilenenden
Unix beendet Zeilen mit LF (10); Windows mit CR LF (13 10); das klassische Mac OS nutzte CR allein. Fernschreiber brauchten beides: Wagenrücklauf, um den Kopf zurückzufahren, Zeilenvorschub, um das Papier weiterzubewegen. \r\n in der Shebang-Zeile eines Shell-Skripts ist noch immer die häufigste Ursache für „bad interpreter“-Fehler.
Fragen
Was ist der ASCII-Code für A?
65 dezimal, 0x41 hexadezimal, 0101 oktal, 01000001 binär. Das kleine a ist 97 (0x61).
Was ist ASCII 10 und 13?
10 ist LF (Zeilenvorschub, \n) und 13 ist CR (Wagenrücklauf, \r). Unix nutzt LF allein; Windows nutzt CR LF.
Warum sendet Strg-C 3?
Terminals löschen die zwei hohen Bits des Buchstabencodes: C ist 0x43 = 0100 0011, und 0x43 & 0x1F = 3 (ETX, Textende). Die Shell bildet ETX auf SIGINT ab.
Ist 0xFF oder 255 ASCII?
Nein. ASCII endet bei 127. 128–255 hängen von der Codepage ab, und in UTF-8 kommen diese Bytewerte nur als Teile von Mehrbyte-Zeichen vor.