6.9 编�和解��六进制数¶

问题¶

你想将一个�六进制字符串解��一个字节字符串或者将一个字节字符串编��一个�六进制字符串。

解决方案¶

如果你�是简�的解�或编�一个�六进制的原始字符串,�以使用 binascii 模�。例如:

>>> # Initial byte string
>>> s = b'hello'
>>> # Encode as hex
>>> import binascii
>>> h = binascii.b2a_hex(s)
>>> h
b'68656c6c6f'
>>> # Decode back to bytes
>>> binascii.a2b_hex(h)
b'hello'
>>>

类似的功能�样�以在 base64 模�中找到。例如:

>>> import base64
>>> h = base64.b16encode(s)
>>> h
b'68656C6C6F'
>>> base64.b16decode(h)
b'hello'
>>>

讨论¶

大部分情况下,通过使用上述的函数�转��六进制是很简�的。 上�两�技术的主���在于大�写的处�。 函数 base64.b16decode() 和 base64.b16encode() �能�作大写形�的�六进制字�, 而 binascii 模�中的函数大�写都能处�。

还有一点需�注�的是编�函数所产生的输出总是一个字节字符串。 如果想强制以Unicode形�输出,你需�增加一个�外的界�步骤。例如:

>>> h = base64.b16encode(s)
>>> print(h)
b'68656C6C6F'
>>> print(h.decode('ascii'))
68656C6C6F
>>>

在解��六进制数时,函数 b16decode() 和 a2b_hex() �以接�字节或unicode字符串。 但是,unicode字符串必须仅仅�包�ASCII编�的�六进制数。