代码之家  ›  专栏  ›  技术社区  ›  recursive

如何从长十六进制字符串创建python bytes对象?

  •  66
  • recursive  · 技术社区  · 15 年前

    我在字符串中有一个长的十六进制数字序列,例如

    00000000000484240FA063DE5D0B744ADBED63A81FAEA390000C8428640A43D5005BD44

    只有很长的时间,几千字节。在python 2.6/3中,是否有一种内置的方法将其转换为bytes对象?

    5 回复  |  直到 8 年前
        1
  •  59
  •   Jens    8 年前

    在python 2.7及更高版本中工作,包括python3:

    result = bytearray.fromhex('deadbeef')
    

    注: 好像有个虫子 bytearray.fromhex() 在python 2.6中的函数。python.org文档声明函数接受一个字符串作为参数,但当应用时,会引发以下错误:

    >>> bytearray.fromhex('B9 01EF')
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: fromhex() argument 1 must be unicode, not str`
    
        2
  •  46
  •   vili    15 年前
    result = bytes.fromhex(some_hex_string)
    
        3
  •  39
  •   Brian    15 年前

    您可以使用十六进制编解码器来实现这一点。IE:

    >>> s='000000000000484240FA063DE5D0B744ADBED63A81FAEA390000C8428640A43D5005BD44'
    >>> s.decode('hex')
    '\x00\x00\x00\x00\x00\x00HB@\xfa\x06=\xe5\xd0\xb7D\xad\xbe\xd6:\x81\xfa\xea9\x00\x00\xc8B\x86@\xa4=P\x05\xbdD'
    
        4
  •  33
  •   Scott Griffiths    13 年前

    试试 binascii module

    from binascii import unhexlify
    b = unhexlify(myhexstr)
    
        5
  •  -2
  •   Jens    8 年前
    import binascii
    
    binascii.b2a_hex(obj)