20.1 binascii:二進制和ASCII互轉
作用:二進制和ASCII互相轉換。
Python版本:1.5及以后版本
binascii模塊包含很多在二進制和ASCII編碼的二進制表示轉換的方法。通常情況不會直接使用這些功能,而是使用像UU,base64編碼,或BinHex封裝模塊。 binascii模塊包含更高級別的模塊使用的,用C語言編寫的低級高效功能。
偶有使用於字符串和ASCII的轉換,比如:
>>> s = 'hello'
>>> b = b2a_hex(s)
>>> print b
68656c6c6f
>>> a2b_hex(b)
'hello'
>>> b = hexlify(s)
>>> print b
68656c6c6f
>>> unhexlify(b)
'hello'
上面的函數hexlify和b2a_hex實際是一個函數,建議使用hexlify。作用是返回的二進制數據的十六進制表示。每一個字節的數據轉換成相應的2位十六進制表示。因此產生的字串是源數據兩倍長度。a2b_hex和unhexlify則執行反向操作。
注意區分hexlify和內置函數hex等的區別。Hex僅僅轉換整數,使用字符串作為參數會報錯。
>>> hex(23)
'0x17'
>>> hex(-23)
'-0x17
>>> hex('23')
Traceback (most recent call last):
File"<stdin>", line 1, in <module>
TypeError: hex() argument can't be converted to hex
>>>
另外浮點數轉換為16進制的方法:float.hex(),比如:
>>> 1.03.hex()
'0x1.07ae147ae147bp+0'
int([x[,base]]) 轉換字符串或者數值為整。參數為字符串的時候,必須制定進制base,默認進制是10,可以取[2,36]或者0。為0的時候,進制信息從字符串中獲取。Int的返回為10進制的整數。輸入為浮點數時,會進行靠近0截斷處理。類似的內置函數有float,long等。
>>> int(0x17)
23
>>> int(-0x17)
-23
>>> int('23')
23
>>> int('1101',2)
13
>>> int('1101',36)
47953
>>> int('1101',8)
577
>>>
>>> int(11.92)
11
>>> int(-11.92)
-11
chr(i)返回ASCII碼中整數對應的單個字符串。例如,chr(97)返回字符串'a'。和ord剛好相反。該參數必須是在范圍[0..255]。
unichr(i)是chr的unicode版本,例如,unichr(97)返回字符串u'a'。參數的取值范圍取決於Python如何配置 - 這可能是UCS2 [0..0xFFFF]或UCS4 [0..0x10FFFF]。
ord(c)chr和unichr的反向操作。例如,ord('a')返回整數97,ord(u'\u2020')返回8224。這是CHR()(8位字符串和unichr逆的unicode對象)。如果Python是基於UCS2編譯,參數范圍為[0 ..65535]包容性。
Hexlify的優勢在於可以同時處理多個字符。下面2個操作有一定類似性,返回值都是字符串,不過hexlify去掉了’0x’。
>>> hex(ord('a'))
'0x61'
>>> hexlify('a')
'61'
函數列表:
binascii.a2b_uu(string)
binascii.b2a_uu(data)
binascii.a2b_base64(string)
binascii.b2a_base64(data)
binascii.a2b_qp(string[, header])
binascii.b2a_qp(data[, quotetabs, istext, header])
binascii.a2b_hqx(string)
binascii.rledecode_hqx(data)
binascii.rlecode_hqx(data)
binascii.b2a_hqx(data)
binascii.crc_hqx(data, crc)
binascii.crc32(data[, crc])
binascii.b2a_hex(data)
binascii.b2a_hex(data)
binascii.hexlify(data)
binascii.a2b_hex(hexstr)
binascii.unhexlify(hexstr)
異常有:
exception binascii.Error
exception binascii.Incomplete
相關模塊:
Module base64
Support for base64 encoding used inMIME email messages.
Module binhexwww.2cto.com
Support for the binhex format used onthe Macintosh.
Module uu
Support for UU encoding used on Unix.
Module quopri
Support for quoted-printable encodingused in MIME email messages.