我现在正在这样做:
[root@~]# echo Aa|hexdump -v
0000000 6141 000a
0000003
[root@~]# echo -e "\x41\x41\x41\x41"
AAAA
但它的行为并不完全符合我的预期,
Aa
的十六进制形式应该是 4161
,但输出结果是 6141 000a
,这似乎没有意义。
在执行十六进制到 ASCII 转换时,是否有其他实用程序可以使我不需要前缀 \x
?
我现在正在这样做:
[root@~]# echo Aa|hexdump -v
0000000 6141 000a
0000003
[root@~]# echo -e "\x41\x41\x41\x41"
AAAA
但它的行为并不完全符合我的预期,
Aa
的十六进制形式应该是 4161
,但输出结果是 6141 000a
,这似乎没有意义。
在执行十六进制到 ASCII 转换时,是否有其他实用程序可以使我不需要前缀 \x
?
SteinAir上面的回答对我很有帮助--谢谢!以下是一种它启发的方法,将十六进制字符串转换为ASCII:
for h in $(echo "4161" | sed "s/\(..\)/\1 /g"); do printf `echo "\x$h"`;done
Aa
echo -n Aa | hexdump -e '/1 "%02x"'; echo
jcomeau@aspire:~$ echo -n The quick brown fox jumps over the lazy dog | python -c "print raw_input().encode('hex'),"
54686520717569636b2062726f776e20666f78206a756d7073206f76657220746865206c617a7920646f67
jcomeau@aspire:~$ echo -n The quick brown fox jumps over the lazy dog | python -c "print raw_input().encode('hex')," | python -c "print raw_input().decode('hex'),"
The quick brown fox jumps over the lazy dog
这也可以用Python3完成,但方式不同,而我是个懒狗。
python
!= bash
- Yokaised
、hexdump
、printf
、awk
或者 xxd
。 - jcomeau_ictxecho Aa | hexdump -C -e '/1 "%02X"'
将返回4161
要在末尾添加额外的换行符,请添加另一个格式化程序。
但是:以上所给格式会为重复字符提供多个输出。
$ printf "Hello" | hexdump -e '/1 "%02X"'
48656C*
6F
而不是
48656c6c6f
echo在末尾添加回车符。
使用
echo -e
去掉多余的0x0A
另外,默认情况下,hexdump 不会按字节工作。这就是为什么它显示字节的顺序很奇怪并且为什么它会显示一个额外的0x00。