【问题标题】:Python: How to convert a string containing hex bytes to a hex stringPython:如何将包含十六进制字节的字符串转换为十六进制字符串
【发布时间】:2012-06-05 03:53:55
【问题描述】:

我认为 binascii 是我正在寻找的模块,但我似乎无法得到我正在寻找的确切结果。

这就是我想要做的。我要转换:

>>> s = '356a192b7913b04c54574d18c28d46e6395428ab'
>>> print len(s)
40

>>> 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

任何 Pythonistas 都知道一种很酷的(或者,坦率地说,实用的)方法来做到这一点?

【问题讨论】:

    标签: python string hex


    【解决方案1】:

    所有版本的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()

    【讨论】:

    • 是的,这正是我要找的,它在字符串类中等着我。谢谢,斯文!
    • 如果这很重要,您也可以执行 s.decode("hex").upper() 来获取大写。
    • 您介意提供 Python 3.x 版本吗,因为这是公认的答案(并且可能永远如此)
    • @Marc 答案实际上已经包含了 Python 3 版本,但没有明确说明——现在已经明确了。
    • 现在你可以做bytes.fromhex('356a192b7913b04c54574d18c28d46e6395428ab')
    【解决方案2】:

    使用binascii 模块:

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

    【讨论】:

    猜你喜欢
    • 2019-07-27
    • 2017-08-23
    • 2018-01-31
    • 2013-02-07
    • 1970-01-01
    • 2018-06-16
    • 2014-03-19
    • 1970-01-01
    相关资源
    最近更新 更多