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ç¼–ç �çš„å��å…进制数。