Die ^@
ist die Art und Weise, wie ein ASCII NUL in druckbarer Form dargestellt wird. Das ist das gleiche wie der @
Charakter mit einigen Bits entfernt:
@ = 0100
^@ = 0
und es ist die gleiche wie '\0'
(das String-Terminator in C). Da es sich um den String-Terminator handelt, würden Sie es nicht von printf
oder den zugehörigen Funktionen sehen, aber Sie können es problemlos mit der blockorientierten write
erstellen. Zum Beispiel haben Sie
write(fd,"apple\0orange",sizeof("apple\0orange"));
und
apple^@orange^@
weil jeden doppelte Anführungszeichen Literal in C ein nachgestellten String-Terminator aufweist, die in ihrer Größe geschrieben zu sehen waren gezählt. Wenn Sie die Zeichenfolge ohne seine Terminator zu schreiben hatte gemeint, könnten Sie dies getan haben:
const char *s = "apple";
write(fd,s,strlen(s));
dadurch eliminiert zwei Probleme im Beispiel: (a) eine falsche Länge und (b) möglicherweise inkonsistent String Inhalt und Länge unter Verwendung von Sicherstellen, dass beide der gleiche Gegenstand sind. Siehe Sizeof string literal für einige Kommentare zu (a).
NUL
ist eines der 32 ASCII-Steuerzeichen, deren Werte zwischen 0 und 31 liegen, C0-Steuerelemente genannt. Alle diese ASCII-Steuerzeichen werden normalerweise auf diese Weise (für eine druckbare Form) angezeigt, wobei das Zeichen verwendet wird, das dem Wert des Steuerzeichens 64 (0100) hinzufügt.
ASCII DEL
ist 127 (0177). Die Anzeige als ^?
ist ein Spezialfall, der neuer ist als die anderen ASCII-Steuerzeichen. Zum Beispiel, X/Open terminfo (curses) definiert keine druckbare Form für dieses Zeichen, obwohl es für die anderen tut. Im Gegensatz zu den anderen ASCII-Steuerzeichen wird DEL
durch ODER-Verknüpfung aller (sieben) Bits in das Zeichen gebildet.
ASCII ist natürlich ein 7-Bit-Code.Viele andere Codes wurden entwickelt; ASCII entspricht der POSIX portable character set, daher ist es häufig anzutreffen.
Es ist einfach, Tabellen von ASCII-Zeichen mit einer Websuche zu finden. Die meisten dieser Tabellen (oder ihre begleitende Diskussion) weichen in Fehlinformationen ab. Hier ist ein Link zu einer einigermaßen sachlichen Seite mit dem Titel ASCII Character Set. Darin heißt es
Die Steuerungstaste 64 von dem Wert des Schlüssels abzieht, die es modifiziert.
Allerdings ist die Aussage nur dann richtig, wenn der Schlüssel einer von denen aus der Menge ist @
, A
, B
, etc. Wenn Sie auf andere Tasten gelten, dass die Ergebnisse vielleicht interessant sind, aber nicht sinnvoll. Vielmehr wird in einem C-Programm würden Sie eine logische Maskierung tun, zum Beispiel
ch = ch & 037;
ein Zeichen im Bereich von 0 bis 31
ändern 'sizeof ("Apfel")' auf 'strlen (“ zu erhalten apple ")', um es loszuwerden –
In diesen Fällen, verwenden Sie ein Hexdump-Programm, um sicher über den Inhalt der Datei zu sein http://www.theunixschool.com/2011/06/3-different-ways-of-dumping -hex.html – leonbloy