python模块之binascii

来源:互联网 发布:php rides 编辑:程序博客网 时间:2024/04/28 07:12
二进制和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
0 0
原创粉丝点击