binascii– 在二进制和ASCII之间转换


binascii模块包含许多方法来转换二进制和各种ASCII编码的二进制表示。通常,您不会直接使用这些函数,而是使用包装模块,如uu,base64binhexbinascii模块包含用C编写的低级函数,以便更高速度使用更高级别的模块.

注意

a2b_*函数接受仅包含ASCII字符的Unicode字符串。其他函数只接受类似于字节的对象(例如bytes, bytearray和其他支持缓冲协议的对象).

在版本3.3中更改: a2b_*函数

现在接受ASCII-only unicode字符串binascii模块定义了以下函数:

binascii.a2b_uustring

将一行uuencoded数据转换回二进制并返回二进制数据。行通常包含45个(二进制)字节,最后一行除外。Linedata可能后跟空格.

binascii.b2a_uu (data, *, backtick=False)

将二进制数据转换为ASCII字符行,返回值为转换行,包括换行符char。data的长度最多为45。如果backtick是的,零由@表示"`"而不是空间.

更改版本3.7:添加了backtick参数。

binascii.a2b_base64string

将base64数据块转换回二进制并返回二进制数据。更多一行可以一次通过.

binascii.b2a_base64 (data, *, newline=True)

将二进制数据转换为base64编码中的ASCII字符行。returnvalue是转换后的行,如果newline istrue,则包括换行符。此功能的输出符合RFC 3548 .

在版本3.6中更改:添加了newline参数.

binascii.a2b_qp (data, header=False )

将一个quoted-printable数据块转换回二进制并返回binarydata。一次可以传递多行。如果是可选参数header存在且真实,下划线将被解码为spaces.

binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)

将二进制数据转换为quoted-printableencoding中的ASCII字符行。返回值是转换后的行。如果存在可选参数quotetabs且为true,则将对所有选项卡和空格进行编码。如果选项参数istext存在且为真,则不对新行进行编码,但会对尾随空格进行编码。如果可选参数header ispresent和true,则空格将按 RFC 1522 编码为下划线。如果选项参数header存在且为false,则换行字符也将被编码;否则换行转换可能会损坏二进制数据流.

binascii.a2b_hqxstring)

binhex4格式的ASCII数据转换为二进制,而不进行RLE解压缩。字符串应包含完整的数字二进制字节,或(在binhex4数据的最大部分的情况下)剩余的位为零.

binascii.rledecode_hqx (data)

对数据执行RLE-decompression,根据binhex4标准。该算法使用0x90在一个字节作为重复指示符之后,后跟一个count.A计数0指定一个0x90的字节值。例程返回解压缩的数据,除非数据输入数据以孤立的重复指示符结束,在这种情况下会引发Incomplete异常.

在版本3.2中更改:仅接受bytestring或bytearray对象作为输入.

binascii.rlecode_hqx (data)

data上执行binhex4样式的RLE压缩并返回结果.

binascii.b2a_hqxdata

执行hexbin4二进制到ASCII转换并返回结果字符串。该参数应该已经是RLE编码的,并且可以被3整除(除了可能是最后一个片段).

binascii.crc_hqxdata, value

计算一个16位的CRCdata,以value作为初始CRC,并返回结果。这使用CRC-CCITT多项式x 16 + x 12 + x 5 + 1,通常表示为0x1021。这个CRC用于binhex4格式.

binascii.crc32 (data [, value])

计算CRC-32,32data,从value的初始CRC开始。默认初始CRC为零。该算法与ZIP文件校验和一致。由于该算法被设计用作校验和算法,因此不适合用作一般的算法。使用方法如下:

print(binascii.crc32(b"hello world"))# Or, in two pieces:crc = binascii.crc32(b"hello")crc = binascii.crc32(b" world", crc)print("crc32 = {:#010x}".format(crc))

在版本3.0中更改:结果始终是unsigned。要在所有Python版本和平台上生成相同的数值,请使用crc32(data) & 0xffffffff.

binascii.b2a_hexdata
binascii.hexlifydata

返回二进制data的十六进制表示。data的每个字节转换为相应的2位十六进制表示。因此,字节对象的长度是data.

的两倍,使用bytes.hex()方法也可以方便地访问类似的功能(但返回一个文本字符串)

binascii.a2b_hexhexstr
binascii.unhexlifyhexstr

返回十六进制字符串hexstr表示的二进制数据。这个功能是b2a_hex(). hexstr必须包含偶数个十六进制数字(可以是大写或小写),否则会引发Error异常.

相似的功能(仅接受文本字符串参数,但对空白更多自由)是也可以使用bytes.fromhex()类方法访问.

exception binascii.Error

错误引发异常。这些通常是编程错误.

exception binascii.Incomplete

对不完整数据提出异常。这些通常不是编程错误,但可以通过读取更多数据并再次尝试来处理.

参见

模块base64
支持符合RFC的base64样式编码基座16,32,64和85.
模块binhex
支持Macintosh上使用的binhex格式.
模块uu
支持UU在Unix上使用的编码
模块quopri
支持MIME电子邮件中使用的带引号的可打印编码.