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


这个 binascii 模块包含许多方法,可以在二进制和各种ASCII编码的二进制表示形式之间进行转换。通常,您不会直接使用这些函数,而是使用封装器模块,例如 uubase64binhex 相反。这个 binascii 模块包含用C语言编写的低级功能,以提高高级模块使用的速度。

注解

a2b_* 函数接受仅包含ASCII字符的Unicode字符串。其他功能仅接受 bytes-like objects (如 bytesbytearray 以及其他支持缓冲协议的对象)。

在 3.3 版更改: 现在只接受ASCII Unicode字符串 a2b_* 功能。

这个 binascii 模块定义以下功能:

binascii.a2b_uu(string)

将一行UUCoded数据转换回二进制并返回二进制数据。行通常包含45(二进制)字节,除了最后一行。行数据后面可以跟空白。

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

将二进制数据转换为一行ASCII字符,返回值是转换后的行,包括换行符。长度 data 应该不超过45岁。如果 backtick 是真的,零用 '`' 而不是空格。

在 3.7 版更改: 增加了 backtick 参数。

binascii.a2b_base64(string)

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

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

将二进制数据转换为base64编码中的一行ASCII字符。返回值是已转换的行,包括换行符if newline 是真的。此函数的输出符合 RFC 3548 .

在 3.6 版更改: 增加了 newline 参数。

binascii.a2b_qp(data, header=False)

将引用的可打印数据块转换回二进制并返回二进制数据。一次可以通过多行。如果可选参数 *header*如果存在且为真,则下划线将被解码为空格。

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

将二进制数据转换为带引号的可打印编码的ASCII字符行。返回值是已转换的行。如果可选参数 行情表 如果存在且为真,则将对所有选项卡和空格进行编码。如果可选参数 istext 如果存在且为真,则不会对换行进行编码,但将对尾随的空白进行编码。如果可选参数 *header*如果存在且为真,则空格将根据 RFC 1522 . 如果可选参数 *header*如果为present和false,换行符也将被编码;否则换行转换可能会损坏二进制数据流。

binascii.a2b_hqx(string)

将binhex4格式的ASCII数据转换为二进制数据,而不进行RLE解压。字符串应该包含完整的二进制字节数,或者(如果是binhex4数据的最后一部分)将剩余的位置零。

3.9 版后已移除.

binascii.rledecode_hqx(data)

按照binhex4标准对数据进行rle解压。算法使用 0x90 在一个字节之后作为重复指示器,后跟一个计数。伯爵 0 指定的字节值 0x90 . 该例程返回已解压缩的数据,除非数据输入数据以孤立的重复指示器结束,在这种情况下, Incomplete 引发异常。

在 3.2 版更改: 只接受bytestring或bytearray对象作为输入。

3.9 版后已移除.

binascii.rlecode_hqx(data)

在上执行binhex4样式的rle压缩 data 并返回结果。

3.9 版后已移除.

binascii.b2a_hqx(data)

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

3.9 版后已移除.

binascii.crc_hqx(data, value)

计算的16位CRC值 data 开始 value 作为初始CRC,并返回结果。这使用CRC-CCITT多项式 x16 + x12 + x5 + 1 ,通常表示为0x1021。此CRC以binhex4格式使用。

binascii.crc32(data[, value])

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

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 版更改: 结果总是无符号的。要在所有Python版本和平台上生成相同的数值,请使用 crc32(data) & 0xffffffff .

binascii.b2a_hex(data[, sep[, bytes_per_sep=1]])
binascii.hexlify(data[, sep[, bytes_per_sep=1]])

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

类似的功能(但返回文本字符串)也可以使用 bytes.hex() 方法。

如果 sep 是指定的,它必须是单个字符str或bytes对象。它将在每个 bytes_per_sep 输入字节。默认情况下,分隔符的位置是从输出的右端开始计数的,如果希望从左侧开始计数,请提供一个负数 bytes_per_sep 价值。

>>> import binascii
>>> binascii.b2a_hex(b'\xb9\x01\xef')
b'b901ef'
>>> binascii.hexlify(b'\xb9\x01\xef', '-')
b'b9-01-ef'
>>> binascii.b2a_hex(b'\xb9\x01\xef', b'_', 2)
b'b9_01ef'
>>> binascii.b2a_hex(b'\xb9\x01\xef', b' ', -2)
b'b901 ef'

在 3.8 版更改: 这个 sepbytes_per_sep 已添加参数。

binascii.a2b_hex(hexstr)
binascii.unhexlify(hexstr)

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

也可以使用 bytes.fromhex() 类方法。

exception binascii.Error

出现错误时引发异常。这些通常是编程错误。

exception binascii.Incomplete

对不完整的数据引发异常。这些通常不是编程错误,但可以通过读取更多数据并重试来处理。

参见

模块 base64

支持以16、32、64和85为基数的符合RFC的base64样式编码。

模块 binhex

支持Macintosh上使用的binhex格式。

模块 uu

支持在Unix上使用UU编码。

模块 quopri

支持在mime电子邮件中使用引用的可打印编码。