我现在这样做:
[root@~]# echo Aa|hexdump -v
0000000 6141 000a
0000003
[root@~]# echo -e "\x41\x41\x41\x41"
AAAA
Run Code Online (Sandbox Code Playgroud)
但它并不像我想的那样完全表现,
十六进制形式Aa应该是4161,但输出是6141 000a,这似乎没有意义.
当执行十六进制到ascii时,是否有另一个实用程序,所以我不需要前缀\x?
Ran*_*832 55
原因是因为hexdump默认情况下打印出16位整数,而不是字节.如果您的系统具有它们,hd(或hexdump -C)或xxd将提供不太令人惊讶的输出 - 如果不是,od -t x1则是POSIX标准的方式来获得逐字节十六进制输出.您可以使用它od -t x1c来显示字节十六进制值和相应的字母.
如果你有xxd(随vim一起提供),你可以使用xxd -r从十六进制转换回来(从相同的格式xxd生成).如果你只有普通的十六进制(只是'4161',由它产生xxd -p)你可以xxd -r -p用来转换回来.
Mik*_*kel 19
第一部分,试试吧
echo Aa | od -t x1
Run Code Online (Sandbox Code Playgroud)
它逐字节打印
$ echo Aa | od -t x1
0000000 41 61 0a
0000003
Run Code Online (Sandbox Code Playgroud)
这0a是echo产生的隐式换行符.
使用echo -n或printf代替.
$ printf Aa | od -t x1
0000000 41 61
0000002
Run Code Online (Sandbox Code Playgroud)
bas*_*ist 16
$> printf "%x%x\n" "'A" "'a"
4161
Run Code Online (Sandbox Code Playgroud)
对于单线解决方案:
echo "Hello World" | xxd -ps -c 200 | tr -d '\n'
Run Code Online (Sandbox Code Playgroud)
它将打印:
48656c6c6f20576f726c640a
Run Code Online (Sandbox Code Playgroud)
或文件:
cat /path/to/file | xxd -ps -c 200 | tr -d '\n'
Run Code Online (Sandbox Code Playgroud)
对于反向操作:
echo '48656c6c6f20576f726c640a' | xxd -ps -r
Run Code Online (Sandbox Code Playgroud)
它将打印:
Hello World
Run Code Online (Sandbox Code Playgroud)