Ich mache es jetzt so:
[[email protected]~]# echo Aa|hexdump -v
0000000 6141 000a
0000003
[[email protected]~]# echo -e "\x41\x41\x41\x41"
AAAA
Aber es ist nicht genau so, wie ich wollte,
die Hex-Form von Aa
sollte 4161
sein, aber die Ausgabe ist 6141 000a
, was keinen Sinn macht.
gibt es bei der Ausführung von hex to ascii ein anderes Hilfsprogramm, damit ich das Präfix \x
nicht benötige?
Der Grund ist, dass hexdump
standardmäßig 16-Bit-Ganzzahlen und keine Bytes ausgibt. Wenn dies in Ihrem System vorhanden ist, werden hd
(oder hexdump -C
) oder xxd
weniger überraschende Ausgaben liefern. Andernfalls ist od -t x1
eine POSIX-Standardmethode, um eine Byte-für-Byte-Hex-Ausgabe zu erhalten. Sie können od -t x1c
verwenden, um sowohl die Byte-Hex-Werte als auch die entsprechenden Buchstaben anzuzeigen.
Wenn Sie xxd
haben (was im Lieferumfang von vim enthalten ist), können Sie xxd -r
verwenden, um die Konvertierung von Hex (aus demselben Format, das xxd
erzeugt) umzuwandeln. Wenn Sie nur ein einfaches Hex haben (nur die '4161', die von xxd -p
erzeugt wird), können Sie xxd -r -p
verwenden, um zurück zu konvertieren.
Versuchen Sie es für den ersten Teil
echo Aa | od -t x1
Es wird Byte für Byte gedruckt
$ echo Aa | od -t x1
0000000 41 61 0a
0000003
Der 0a
ist die implizite Newline, die das Echo erzeugt.
Verwenden Sie stattdessen echo -n
oder printf
.
$ printf Aa | od -t x1
0000000 41 61
0000002
$> printf "%x%x\n" "'A" "'a"
4161
Für einzeilige Lösung:
echo "Hello World" | xxd -ps -c 200 | tr -d '\n'
Es wird gedruckt:
48656c6c6f20576f726c640a
oder für Dateien:
cat /path/to/file | xxd -ps -c 200 | tr -d '\n'
Für Rückwärtsbetrieb:
echo '48656c6c6f20576f726c640a' | xxd -ps -r
Es wird gedruckt:
Hello World
Mit bash:
a=abcdefghij
for ((i=0;i<${#a};i++));do printf %02X \'${a:$i:1};done
6162636465666768696A
Ich weiß nicht, wie verrückt es aussieht, aber es funktioniert wirklich gut
ascii2hex(){ a="[email protected]";s=0000000;printf "$a" | hexdump | grep "^$s"| sed s/' '//g| sed s/^$s//;}
Dies wurde erstellt, als ich versuchte, meinen Namen in HEX zu sehen;) Wie kann man es verwenden :)
echo -n Aa | hexdump -e '/1 "%02x"'; echo
Die Antwort von SteinAir war hilfreich für mich - Danke! Und unten ist ein Weg, wie er inspiriert wurde, um Hex-Strings in ASCII zu konvertieren:
for h in $(echo "4161" | sed "s/\(..\)/\1 /g"); do printf `echo "\x$h"`;done
Aa
Text2Conv="Aa"
for letter in $(echo "$Text2Conv" | sed "s/\(.\)/'\1 /g");do printf '%x' "$letter";done
4161
Der Trick besteht darin, sed zum Analysieren der Text2Conv-Datei zu verwenden, um sie zu formatieren.
hier ein kleines Skript, das ich geschrieben habe, um ASCII in Hex umzuwandeln. ich hoffe es hilft:
echo '0x'"`echo 'ASCII INPUT GOES HERE' | hexdump -vC | awk 'BEGIN {IFS="\t"} {$1=""; print }' | awk '{sub(/\|.*/,"")}1' | tr -d '\n' | tr -d ' '`" | rev | cut -c 3- | rev
gemäß http://mylinuxbook.com/hexdump/ können Sie den hexdump-Formatparameter verwenden
echo Aa | hexdump -C -e '/1 "%02X"'
wird 4161
zurückgeben
um am Ende einen zusätzlichen Zeilenvorschub hinzuzufügen, hängen Sie einen anderen Formatierer an.
ABER: Das oben angegebene Format liefert Multiplikatorausgaben für sich wiederholende Zeichen
$ printf "Hello" | hexdump -e '/1 "%02X"'
48656C*
6F
anstatt
48656c6c6f
Ich benutze:
> echo Aa | tr -d '\n' | xxd -p
4161
> echo 414161 | tr -d '\n' | xxd -r -p
AAa
Das tr -d '\n'
schneidet mögliche Zeilenumbrüche in Ihrer Eingabe ab