二进制和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