Python 3:无法将ASCII字符串转换为十六进制

时间:2019-06-04 12:58:35

标签: python-3.x hex ascii

Python版本:3.7.2
我需要将类似Øâþ  ÿþ !Zk2ìm "Ï"À>q úÞ的ASCII字符串转换为十六进制,在这种情况下为d8 e2 02 12 02 fe 01 20 9b 10 20 20 03 ff 07 fe 20 20 21 5a 6b 32 ec 17 6d 20 0e 22 cf 22 c0 3e 71 20 02 20 03 fa de。我找到了几种在Python 2上执行此操作的解决方案,但是找不到在Python 3上执行此操作的任何方法。

总结:预期行为是 ASCII到HEX ,如下所示:
Øâþ  ÿþ !Zk2ìm "Ï"À>q úÞ TO d8 e2 02 12 02 fe 01 20 9b 10 20 20 03 ff 07 fe 20 20 21 5a 6b 32 ec 17 6d 20 0e 22 cf 22 c0 3e 71 20 02 20 03 fa de

我什至检查了https://www.rapidtables.com/convert/number/ascii-to-hex.html并发现它可以工作,但是我无法在Python 3中实现它。

2 个答案:

答案 0 :(得分:2)

您可以使用以下代码:

print(*[hex(ord(letter))[2:] for letter in 'Øâþ   ÿþ  !Zk2ìm "Ï"À>q  úÞ'])

给出以下输出:

d8 e2 fe 20 10 20 20 ff fe 20 20 21 5a 6b 32 ec 6d 20 e 22 cf 22 c0 3e 71 20 20 fa de

ord()-获取ASCII码, hex()-从int获取十六进制, [2:]-在每个数字中省略0x

编辑

稍作修改的版本(获取0e而不是e):

string = 'Øâþ   ÿþ  !Zk2ìm "Ï"À>q  úÞ'
print(*['{:02x}'.format(ord(letter)) for letter in string])

答案 1 :(得分:1)

使用ord()

s = 'Øâþ   ÿþ  !Zk2ìm "Ï"À>q  úÞ'
bytes = bytearray(ord(char) for char in s)
print(bytes)

输出:

bytearray(b'\xd8\xe2\xfe \x10  \xff\xfe  !Zk2\xecm \x0e"\xcf"\xc0>q  \xfa\xde')

话说回来,我不能完全匹配您的输出,因为您复制并粘贴了一个垃圾字符:

print(''.join(chr(char) for char in bytes)) # Øâþ   ÿþ  !Zk2ìm "Ï"À>q  úÞ