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

问题描述 投票:0回答:3

我有字节数据,

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

现在,我想创建一个 Linux 脚本来将该数据转换为十六进制字符串。我怎样才能做到这一点?

linux shell hex
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

您可以通过使用

awk
来避免
od -vt x1 -A n
部分。谢谢@Stefan van den Akker。


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

或者,如果您没有

hd
hexdump

$ 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

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 上测试。

相关:显示文件的十六进制数字

© www.soinside.com 2019 - 2024. All rights reserved.