Ich möchte ASCII-Code (wie -
oder _
oder .
usw.) in eine hexadezimale Darstellung in der Unix-Shell (ohne bc
Befehl) konvertieren , z . B.: -
=> %2d
.
Irgendwelche Ideen?
Ich möchte ASCII-Code (wie -
oder _
oder .
usw.) in eine hexadezimale Darstellung in der Unix-Shell (ohne bc
Befehl) konvertieren , z . B.: -
=> %2d
.
Irgendwelche Ideen?
Antworten:
Es gibt ein printf
Tool, das die C-Funktion simuliert. Normalerweise ist es so /usr/bin/printf
, aber viele Shells implementieren auch integrierte Funktionen. Sie können verwenden %02x
, um die Hex-Darstellung eines Zeichens zu erhalten, aber Sie müssen sicherstellen, dass Sie eine Zeichenfolge übergeben, die das Zeichen in einfache Anführungszeichen enthält ( Bearbeiten : Es stellt sich heraus, dass nur ein einfaches Anführungszeichen am Anfang ausreicht):
printf "%%%02x\n" "'-" # Outputs %2d
Sie können der Einfachheit halber eine Shell-Funktion erstellen:
function hex() {
printf "%%%02x\n" "'$1"
}
hex - # Outputs %2d
hex _ # Outputs %5f
hex . # Outputs %2e
hex 'ץ'
geben %5e5
statt %05e5
. Sie sollten den Hauptteil der Funktion in s=
printf "%%% 04x" "'$ 1"; echo "%${s%00}"
Versuchen Sie od :
$ echo -n "-_." | od -A n -t x1
2d 5f 2e
-A n
bedeutet, dass keine Offsets gedruckt werden und -t x1
dass der Typ der Eingabe hexadezimale Ganzzahlen von 1 Byte sind.
echo -n
, um die Newline am Ende wegzulassen, damit Sie od
sie nicht aufheben und in0a
xxd
ist ein Hex-Dump-Dienstprogramm, das als Teil des vim-common
Pakets geliefert wird.
Es verfügt über eine praktische -p
Option, die einen fortlaufenden Hexdump-Stil "Plain / Postscript" ausgibt. Dies kann problemlos rückgängig gemacht werden, indem -r
... -u
Hex-Ziffern in Großbuchstaben ausgegeben werden.
$ echo -n "M" |xxd -p # 1 ASCII char= 1 UTF-8 byte; Unicode Codepoint: U+0041
4d
$ echo -n "〶" |xxd -p -u # 1 CJK char= 3 UTF-8 bytes; Unicode Codepoint: U+3036
E380B6
$ echo -n "Dump a string" |xxd -p -u
44756D70206120737472696E67
$ echo -n "Dump and Revert" |xxd -p |xxd -r
Dump and Revert
xxd -r -p
. Hat xxd -r
im obigen Beispiel einfach nicht funktioniert.