我在StackOverflow上找到了很多关于这个问题的帖子,涵盖了C++、C#和其他语言的解决方案,但没有关于Shell的。
使用Bash/Shell,如何将随机的String
转换为byte array
?
我尝试过:
echo "some string" | xxd -r -p
但它没有生效。
我基本上想要一个字节输出 - 例如 )?e?GV??vY?Ge?#G
我在StackOverflow上找到了很多关于这个问题的帖子,涵盖了C++、C#和其他语言的解决方案,但没有关于Shell的。
使用Bash/Shell,如何将随机的String
转换为byte array
?
我尝试过:
echo "some string" | xxd -r -p
但它没有生效。
我基本上想要一个字节输出 - 例如 )?e?GV??vY?Ge?#G
如果你想要获取一些字符串的十六进制值,可以使用以下方法:
$ echo "testing some values"$'\157' | xxd
0000000: 7465 7374 696e 6720 736f 6d65 2076 616c testing some val
0000010: 7565 736f 0a ueso.
$ echo "testing some values"$'\157' | xxd -p
74657374696e6720736f6d652076616c7565736f0a
$ echo "74657374696e6720736f6d652076616c7565736f0a" | xxd -r -p
testing some valueso
$ echo "testing:"$'\001\011\n\bend test' | od -vAn -tcx1
t e s t i n g : 001 \t \n \b e n d
74 65 73 74 69 6e 67 3a 01 09 0a 08 65 6e 64 20
t e s t \n
74 65 73 74 0a
或者:
$ echo "testing:"$'\001\011\n\bend test' | od -vAn -tax1
t e s t i n g : soh ht nl bs e n d sp
74 65 73 74 69 6e 67 3a 01 09 0a 08 65 6e 64 20
t e s t nl
74 65 73 74 0a
看起来你想将十六进制字符串转换为字节。xxd需要一个起始点(因为它用于修补二进制文件等)
string="626c610a"
echo "0: $string" | xxd -r
xxd 也会默默地跳过任何无效的十六进制数据,因此如果您得到空输出,请检查您的数据。