我在StackOverflow上发现了许多帖子,这些帖子已经用C ++,C#和其他语言覆盖了这个问题,但没有一个用Shell。
使用Bash / Shell,如何将随机String
转换为byte array
?
我试过了:
echo "some string" | xxd -r -p
但它不起作用。
我基本上想要一个字节输出 - 例如)?e?GV??vY?Ge?#G
答案 0 :(得分:16)
如果你想获得某些字符串的十六进制值,那么这可以工作:
$ 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
如果你需要"反向" hex 字符串,您可以:
$ 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
答案 1 :(得分:0)
看起来您想将十六进制字符串转换为字节。 xxd需要一个起点(因为它用于修补二进制文件等)
string="626c610a"
echo "0: $string" | xxd -r
xxd也会默默跳过任何无效的十六进制,因此如果输出为空,请检查数据。