私は今、このようにやっています:
[root@~]# echo Aa|hexdump -v
0000000 6141 000a
0000003
[root@~]# echo -e "\x41\x41\x41\x41"
AAAA
しかし、それは私が望んでいたように正確に動作していません、
Aa
の16進形式は4161
である必要がありますが、出力は6141 000a
であり、意味をなさないようです。
aSCIIに16進数を実行するとき、接頭辞\x
を必要としない別のユーティリティがありますか?
理由は、hexdump
がデフォルトでバイトではなく16ビット整数を出力するためです。システムにそれらがある場合、hd
(またはhexdump -C
)またはxxd
は驚くほど少ない出力を提供します-そうでない場合、od -t x1
はバイトを取得するPOSIX標準の方法ですバイトごとの16進出力。 od -t x1c
を使用して、バイトの16進値と対応する文字の両方を表示できます。
xxd
(vimに同梱)がある場合、xxd -r
を使用して16進数から(xxd
が生成する同じフォーマットから)変換することができます。プレーンな16進数(xxd -p
によって生成される '4161'のみ)がある場合は、xxd -r -p
を使用して元に戻すことができます。
最初の部分については、試してください
echo Aa | od -t x1
バイトごとに印刷します
$ echo Aa | od -t x1
0000000 41 61 0a
0000003
0a
は、エコーが生成する暗黙的な改行です。
つかいます echo -n
またはprintf
代わりに。
$ printf Aa | od -t x1
0000000 41 61
0000002
$> printf "%x%x\n" "'A" "'a"
4161
単一回線ソリューションの場合:
echo "Hello World" | xxd -ps -c 200 | tr -d '\n'
印刷されます:
48656c6c6f20576f726c640a
またはファイルの場合:
cat /path/to/file | xxd -ps -c 200 | tr -d '\n'
逆操作の場合:
echo '48656c6c6f20576f726c640a' | xxd -ps -r
印刷されます:
Hello World
Bashの場合:
a=abcdefghij
for ((i=0;i<${#a};i++));do printf %02X \'${a:$i:1};done
6162636465666768696A
それがどのようにクレイジーに見えるかわかりませんが、それは本当にうまく仕事をします
ascii2hex(){ a="$@";s=0000000;printf "$a" | hexdump | grep "^$s"| sed s/' '//g| sed s/^$s//;}
私がHEXで私の名前を見ようとしたときにこれを作成しました;)どのように使用できますか:)
echo -n Aa | hexdump -e '/1 "%02x"'; echo
上記のSteinAirの回答は私にとって有益でした-ありがとう!以下は、16進文字列をASCIIに変換するためのインスピレーションの方法です。
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
トリックは、sedを使用してText2Convを解析し、forを使用してanfループを分離できるようにフォーマットすることです。
ここに、ASCIIを16進数に変換するために書いた小さなスクリプトを示します。それが役に立てば幸い:
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
http://mylinuxbook.com/hexdump/ に従って、hexdump形式パラメーターを使用できます
echo Aa | hexdump -C -e '/1 "%02X"'
戻ります 4161
最後に改行を追加するには、別のフォーマッターを追加します。
ただし、上記の形式は、繰り返し文字の乗数出力を提供します
$ printf "Hello" | hexdump -e '/1 "%02X"'
48656C*
6F
の代わりに
48656c6c6f
私が使う:
> echo Aa | tr -d '\n' | xxd -p
4161
> echo 414161 | tr -d '\n' | xxd -r -p
AAa
tr -d '\n'
は、入力内の可能な改行を削除します