Python:如何将包含十六进制字节的字符串转换为十六进制字符串

18

我认为我需要的模块是 binascii,但是我似乎无法得到我想要的精确结果。

以下是我的需求。我想要将:

>>> s = '356a192b7913b04c54574d18c28d46e6395428ab'
>>> print len(s)
40
to
>>> hs = '\x35\x6a\x19\x2b\x79\x13\xb0\x4c\x54\x57\x4d\x18\xc2\x8d\x46\xe6\x39\x54\x28\xab'
>>> print len(hs)
20

有没有 Python 程序员知道一种酷炫(或者说实用)的方法来做这件事呢?

2个回答

23
在所有版本的Python中,您可以使用函数binascii.a2b_hex()(也称为binascii.unhexlify()):
>>> import binascii
>>> s = '356a192b7913b04c54574d18c28d46e6395428ab'
>>> binascii.a2b_hex(s)
'5j\x19+y\x13\xb0LTWM\x18\xc2\x8dF\xe69T(\xab'

在Python 3.x中,您可以使用bytes.fromhex(s)
在Python 2.x中,您可以使用hex str-to-str编解码器:
>>> s.decode("hex")
'5j\x19+y\x13\xb0LTWM\x18\xc2\x8dF\xe69T(\xab'

编解码器内部调用binascii.a2b_hex()


能否提供 Python 3.x 版本呢?因为这是被接受的答案(并且很可能永远如此)。 - Marc
@Marc,实际上答案已经包含了Python 3版本,只是没有明确说明 - 现在已经明确说明了。 - Sven Marnach
3
现在你可以执行 bytes.fromhex('356a192b7913b04c54574d18c28d46e6395428ab') - Marc
@Marc 如之前所述,最后一行适用于Python 3。您找到的解决方案也很好。 - Sven Marnach
@Marc 感谢您的反馈 - 我已经尝试澄清答案。 :) - Sven Marnach
显示剩余2条评论

4

使用 binascii 模块:

>>> from binascii import unhexlify
>>> s = '356a192b7913b04c54574d18c28d46e6395428ab'
>>> unhexlify(s)
'5j\x19+y\x13\xb0LTWM\x18\xc2\x8dF\xe69T(\xab'

unhexlify()只是a2b_hex()的另一个名称。binascii文档 - Murmel

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