我有一个由以下字节组成的十六进制字符串:
['0x17','0x9','0x5','0x1f','0x0','0x4','0x16','0x0','0x28','0x53','0x1c','0x8 ','0x12','0x11','0x40','0xe','0x54','0x3b','0x6','0x1e','0x45','0x49','0xa','0x45', '0xe','0x1c','0x1f','0x59','0x41','0x6','0x4f','0x59','0xb','0x16','0x2','0x44','0x53 ','0x1']
十六进制字符串如下:
Names Words
Jon fish, cat, horse, goose
Alex dog, bird, duck, koala
Bill dog, cat, goose, deer
George cat, fish, lizard, duck
如何检索原始字节数组?
在python 3.x中:
'17951f0416028531c8121140e543b61e4549a45e1c1f594164f59b16244531'
返回
b'\ x17 \ x95 \ x1f \ x04 \ x16 \ x02 \ x851 \ xc8 \ x12 \ x11 @ \ xe5C \ xb6 \ x1eEI \ xa4 ^ \ x1c \ x1fYAd \ xf5 \ x9b \ x16 $ E1',< / p>
以及在python 2.x中:bytes.fromhex('17951f0416028531c8121140e543b61e4549a45e1c1f594164f59b16244531')
返回
b'\ x17 \ x95 \ x1f \ x04 \ x16 \ x02 \ x851 \ xc8 \ x12 \ x11 @ \ xe5C \ xb6 \ x1eEI \ xa4 ^ \ x1c \ x1fYAd \ xf5 \ x9b \ x16 $ E1'。< / p>
两者都是完全错误的。这些bytes.fromhex和decode('hex')一次都读取2个字节,因此'0x9'和'0x5'被读为'0x95'。反正有解决办法吗?
请注意,我无法控制原始十六进制字符串的生成。 干杯。
答案 0 :(得分:0)
在您的字符串编码中,几对字节已经合并;确保每个字节由字符串中的两个字符表示,您将获得所需的内容:
In [6]: s
Out[6]: '1709051f0004160028531c081211400e543b061e45490a450e1c1f5941064f590b1602445301'
In [7]: bytes.fromhex(s)
Out[7]: b'\x17\t\x05\x1f\x00\x04\x16\x00(S\x1c\x08\x12\x11@\x0eT;\x06\x1eEI\nE\x0e\x1c\x1fYA\x06OY\x0b\x16\x02DS\x01'
在不知道字符串代表什么样的信息的情况下,没有一种先验的方法来确定应该在哪里添加缺失的0。