将字节数据转换为十六进制字符串的Linux脚本

3

我有一些字节数据,

0Y0*†HÎ*†HÎ=B¬`9E>ÞÕ?ÐŽ·‹ñ6ì­Â‰&ÉÐL_cüsyxoú¢
†
(¯-›E–¿9ÐÖ1ªÐ›¯o

现在,我想创建一个Linux脚本,将该数据转换为十六进制字符串。我该怎么做?

那堆二进制数据在一个文件中吗? - undefined
这些数据在一个文件中。 - undefined
如果你在使用Ubuntu操作系统,打开Python并输入一些命令非常简单。 - undefined
3个回答

9

如果你只想要十六进制字符串:

$ echo '0Y0*†HÎ*†HÎ=B¬`9E>ÞÕ?ÐŽ·‹ñ6ì­Â‰&ÉÐL_cüsyxoú¢'|od -vt x1|awk '{$1="";print}'
 30 59 30 2a e2 80 a0 48 c3 8e 2a e2 80 a0 48 c3
 8e 3d 42 c2 ac 60 39 45 3e c3 9e c3 95 3f c3 90
 c5 bd c2 b7 e2 80 b9 c3 b1 36 c3 ac c2 ad c3 82
 e2 80 b0 26 c3 89 c3 90 4c 5f 63 c3 bc 73 79 78
 6f c3 ba c2 a2 0a

您可以通过使用od -vt x1 -A n来避免使用awk部分。感谢@Stefan van den Akker。


1
我的GNU od 9.0版本有标志-A n,可以跳过偏移量,因此您不必通过awk进行过滤。 - undefined

8
使用hd(十六进制转储)命令:
$ echo '0Y0*†HÎ*†HÎ=B¬`9E>ÞÕ?ÐŽ·‹ñ6ì­Â‰&ÉÐL_cüsyxoú¢' | hd
00000000  30 59 30 2a e2 80 a0 48  c3 8e 2a e2 80 a0 48 c3  |0Y0*...H..*...H.|
00000010  8e 3d 42 c2 ac 60 39 45  3e c3 9e c3 95 3f c3 90  |.=B..`9E>....?..|
00000020  c5 bd c2 b7 e2 80 b9 c3  b1 36 c3 ac c2 ad c3 82  |.........6......|
00000030  e2 80 b0 26 c3 89 c3 90  4c 5f 63 c3 bc 73 79 78  |...&....L_c..syx|
00000040  6f c3 ba c2 a2 0a                                 |o.....|
00000046

或者,如果您没有 hdhexdump

$ echo '0Y0*†HÎ*†HÎ=B¬`9E>ÞÕ?ÐŽ·‹ñ6ì­Â‰&ÉÐL_cüsyxoú¢' | hexdump 
0000000 5930 2a30 80e2 48a0 8ec3 e22a a080 c348
0000010 3d8e c242 60ac 4539 c33e c39e 3f95 90c3
0000020 bdc5 b7c2 80e2 c3b9 36b1 acc3 adc2 82c3
0000030 80e2 26b0 89c3 90c3 5f4c c363 73bc 7879
0000040 c36f c2ba 0aa2                         
0000046

1
hd B_Party_DEFAULT_CERTIFICATE_Public.der bash: hd: 命令未找到 不起作用 - undefined
sudo apt-get install bsdmainutils(在Debian/Ubuntu上)。 - undefined
2
你可以使用hexdump -C命令(我有RedHat,它有hexdump但没有hd) - undefined
1
hd是非标准的,但可以随时使用hexdump -C(包含在util-linux中)来达到相同的效果。 - undefined

0
如果你只想要十六进制字节而不带任何格式化的话:
od -An -v -tx1 | tr -d ' \n'

例子:

printf '0123456789abcdef0123456789abcdef\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f' | od -An -v -tx1 | tr -d ' \n'

输出:

3031323334353637383961626364656630313233343536373839616263646566000102030405060708090a0b0c0d0e0f

在Ubuntu 23.04上进行了测试。
相关链接:如何在bash中创建一个只包含十六进制字符而没有空格的文件的十六进制转储?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接