In C-Nummern beginnend mit einer führenden Null sind octal Zahlen. Zahlen in der Basis 8.
Was es tut, ist das Zeichen octal Nummer 33
, gefolgt von einem 'c'
.
In ASCII encoding die Oktalzahl 33
ist die ESC
(escape) Zeichen, die ein gemeinsamer Präfix für die Terminal-Steuersequenzen ist.
Mit diesem Wissen, das nach terminalen Kontrollsequenzen sucht, können wir z.B. this VT100 control sequence reference (VT100 war ein altes "dummes" Terminal und wird von den meisten modernen Terminalprogrammen emuliert). Unter Verwendung des VT100 Referenz wir <ESC>c
im Terminal-Setup-Sektion, wo es als
Gerät zurücksetzen <ESC>c
zurücksetzen alle Terminal auf die Standardeinstellungen dokumentiert wird.
Der ESC
Charakter auch gedruckt werden kann unter Verwendung von "\x1b"
(immer noch unter der Annahme, ASCII-Codierung). Es gibt keine Möglichkeit, Dezimalzahlen in konstanten String-Literalen zu verwenden, nur oktal und hexadezimal.
jedoch (wie durch the commend by chux angegeben) die Sequenz "\x1bc"
wird nicht das gleiche tun wie "\033c"
. Das liegt daran, dass 0x1bc
eine gültige hexadezimale Zahl ist und der Compiler gierig ist, wenn er solche Sequenzen analysiert. Es wird stattdessen das durch den Wert 0x1bc
dargestellte Zeichen gedruckt, und ich habe keine Ahnung, was es sein könnte (hängt von den Gebietsschema- und Terminaleinstellungen ab, die ich vermute, könnte als ein Unicode-Zeichen gepriesen werden).
Nun, ich glaube nicht, dass eine bessere Antwort existiert! Vielen Dank, dass Sie mir nicht nur etwas Neues beigebracht haben, sondern auch eine korrekte Antwort gegeben haben. – NUGA
Minor: '" \ x1bc "' kann nicht das gleiche Ergebnis wie "\ 033c" ergeben, da die Hexadezimulation nicht eindeutig length limitiert ist. Kann '" \ x1b "" c "' – chux
@chux Beweis verwenden, dass sogar Erfahrung nicht alles manchmal bedeutet. Und diese "Code" -Bewertungen * helfen *. :) –