1 Punkte von GN⁺ 2 시간 전 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Wenn man ASCII in 7 Bit in die oberen 2 Bit (Gruppe) und die unteren 5 Bit (Wert) aufteilt und als 4-Spalten-Tabelle anordnet, wird die Beziehung zwischen Steuerzeichen und druckbaren Zeichen sofort sichtbar
  • Die CTRL-Taste erzeugt Steuerzeichen (control characters) mit denselben unteren 5 Bit, indem sie die oberen Bits des eingegebenen Zeichens auf 0 setzt
  • Drückt man zum Beispiel bei [(10 11011) zusätzlich CTRL, wird daraus ESC(00 11011), was sich durch eine bitweise AND-Operation erklären lässt
  • Warum ^J ein Zeilenumbruch, ^H ein Backspace und ^I ein Tab ist, folgt derselben Struktur; auch die Anzeige von ^M(CR) in Windows-Textdateien beruht auf demselben Prinzip
  • Gewöhnliche ASCII-Tabellen verbergen dieses Muster, aber wenn man die Spalten in Gruppen zu je 32 Zeichen aufteilt, wird die Designabsicht klar erkennbar

Entdeckung der 4-Spalten-ASCII-Tabelle

  • Der Hacker-News-Nutzer soneil veröffentlichte eine Version der ASCII-Tabelle, die in 4 Spalten zu je 32 Zeichen angeordnet ist
  • Durch diese Anordnung lässt sich sofort erkennen, dass der Wechsel zwischen Groß- und Kleinbuchstaben nur ein einzelnes Bit Unterschied ist und dass das Alphabet als 40h + Positionswert kodiert ist (bei Kleinbuchstaben 60h)
  • Auch warum ^\[ für ESC steht, ist in dieser Tabelle direkt zu sehen

Struktur der 7-Bit-ASCII-Kodierung

  • ASCII ist eine 7-Bit-Kodierung; die ersten 2 Bit stehen für 4 Gruppen und die letzten 5 Bit für 32 Werte
    • Gruppe 00: Steuerzeichen (NUL, SOH, STX, ESC usw.)
    • Gruppe 01: Sonderzeichen und Zahlen (Spc, !, ", # usw.)
    • Gruppe 10: Großbuchstaben (@, A, B, C usw.)
    • Gruppe 11: Kleinbuchstaben (`, a, b, c usw.)
  • Zeichen in derselben Zeile haben dieselben unteren 5 Bit; nur die Gruppen-Bits unterscheiden sich

4-Spalten-ASCII-Tabelle

Bit 00 (Steuerung) 01 (Sonderzeichen/Zahlen) 10 (Großbuchstaben) 11 (Kleinbuchstaben)
00000 NUL Spc @ `
00001 SOH ! A a
00010 STX " B b
00011 ETX # C c
00100 EOT $ D d
00101 ENQ % E e
00110 ACK & F f
00111 BEL ' G g
01000 BS ( H h
01001 TAB ) I i
01010 LF * J j
01011 VT + K k
01100 FF , L l
01101 CR - M m
01110 SO . N n
01111 SI / O o
10000 DLE 0 P p
10001 DC1 1 Q q
10010 DC2 2 R r
10011 DC3 3 S s
10100 DC4 4 T t
10101 NAK 5 U u
10110 SYN 6 V v
10111 ETB 7 W w
11000 CAN 8 X x
11001 EM 9 Y y
11010 SUB : Z z
11011 ESC ; [ {
11100 FS < \ |
11101 GS = ] }
11110 RS > ^ ~
11111 US ? _ DEL

Funktionsweise der CTRL-Taste

  • Wenn man die CTRL-Taste drückt, werden die oberen Bits des eingegebenen Zeichens auf 0 gesetzt, wodurch es in die Gruppe der Steuerzeichen (00) verschoben wird
  • Das lässt sich als bitweise AND-Operation ausdrücken:
    • 10 11011([) AND 00 11111(CTRL) = 00 11011(ESC)
  • Deshalb ist es kein willkürliches Mapping, dass CTRL+[ ESC erzeugt, sondern ein auf Bitoperationen basierendes Design

Praktische Beispiele

  • ^J(CTRL+J) ist LF (Zeilenumbruch), ^H(CTRL+H) ist BS (Backspace), und ^I(CTRL+I) ist TAB
  • Wenn man Windows-Textdateien mit cat -A betrachtet, erscheint ^M, weil Windows-Zeilenenden aus CR+LF bestehen
  • Dass vim-Nutzer im Terminal CTRL+[ anstelle von ESC verwenden, geht ebenfalls auf diese Bitstruktur zurück

Noch keine Kommentare.

Noch keine Kommentare.