In der ASCII-Tabelle ist das Zeichen 'J' vorhanden, das Codepunkte in verschiedenen Zahlensystemen enthält:
Oct Dec Hex Char
112 74 4A J
Es ist möglich , diese Zeichen durch einen Oktalcode Punkt zu drucken , durch Druck
printf '\112'
oder echo $'\112'
. Wie drucke ich dasselbe Zeichen durch dezimale und hexadezimale Codepunktpräsentationen?
Antworten:
Verhexen:
Dez:
Alternative für Hex :-)
quelle
awk
.Mit
zsh
:So rufen Sie ein Zeichen (im aktuellen Zeichensatz) vom Unicode-Codepunkt ab:
quelle
Im Allgemeinen kann die Shell Hex-, Okt- und Dezimalzahlen in Variablen verstehen, vorausgesetzt, sie wurden wie folgt definiert
integers
:Oder sie sind das Ergebnis einer "arithmetischen Erweiterung":
Sie brauchen also nur eine Möglichkeit, um das Zeichen zu drucken, das zu einem variablen Wert gehört.
Aber hier sind zwei Möglichkeiten:
Die beiden printf werden benötigt, eine, um den Wert in eine hexadezimale Zeichenfolge umzuwandeln, und die zweite, um das Zeichen tatsächlich zu drucken.
Der zweite druckt einen beliebigen UNICODE-Punkt (wenn Ihre Konsole richtig eingestellt ist).
Beispielsweise:
Ein Schneemann.
Das Zeichen, das eine utf-8-Darstellung
f0 9f 90 ae
hat0x1F42E
. Suchen Sie nachcow face site:fileformat.info
, um es zu bekommen :Hinweis : Es gibt ein Problem mit der UNICODE-Methode, da für Bash vor 4.3 (korrigiert in dieser Version und höher) die Zeichen zwischen den UNICODE-Punkten 128 und 255 (in Dezimalzahlen) möglicherweise falsch gedruckt werden.
Verweise
Vierter Absatz innen
PARAMETERS
inman bash
:Innerhalb von "ARITHMETIC EVALUATION" in
man bash
:quelle
é
(Oktal: 351, Dez: 233, Hex: 0xE9) wird falsch gedruckt,printf '\351'
da es einen Bytewert von0xE9
immer druckt . Für ein Terminal mit einer Codierung vonISO-8859-1
(und Cousins), die möglicherweise funktioniert, aber in utf-8-codierten Terminals sollte ein Bytewert von0xE9
als angezeigt werden. Fortsetzung ....\u
(was von zsh kommt).Dezimal:
Verhexen:
Die Funktion kann Sequenzen ausführen:
quelle
Sie können die POSIX Awk stdlib-Bibliothek verwenden :
quelle
Wenn Sie eine Liste mit zu konvertierenden Zahlen haben und einen Funktionsaufruf vermeiden und für jedes Zeichen eine Unterschale erstellen möchten, können Sie den ASCII-Satz im Voraus definieren:
Beachten Sie, dass Nullzeichen ausgeschlossen sind, sodass jedes Zeichen um 1 versetzt ist.
Verwenden Sie dann so etwas (setzt 1 Nummer pro Zeile voraus):
quelle
Hier sind alle Conversions mit
printf
:quelle