On this page
18.14. binascii —在二进制和 ASCII 之间转换
binascii模块包含许多在二进制和各种 ASCII 编码的二进制表示形式之间进行转换的方法。通常,您不会直接使用这些Function,而应使用uu,base64或binhex之类的包装器模块。 binascii模块包含以更高的速度用 C 编写的低级Function,这些Function由上级模块使用。
binascii模块定义以下Function:
binascii.
a2b_uu
(* string *)- 将单行 uuencoded 数据转换回二进制并返回二进制数据。除最后一行外,各行通常包含 45 个(二进制)字节。行数据后可以跟空格。
binascii.
b2a_uu
(* data *)- 将二进制数据转换为一行 ASCII 字符,返回值是转换后的行,包括换行符。 * data *的长度最多为 45.
binascii.
a2b_base64
(* string *)- 将 base64 数据块转换回二进制并返回二进制数据。一次可能会超过一行。
binascii.
b2a_base64
(* data *)- 使用 base64 编码将二进制数据转换为一行 ASCII 字符。返回值是转换后的行,包括换行符。添加换行符是因为此函数的原始用例是向其提供一系列 57 字节的 Importing 行,以获取符合 MIME-base64 标准的输出行。否则输出符合 RFC 3548。
binascii.
a2b_qp
(* string * [,* header *])- 将带引号的可打印数据块转换回二进制并返回二进制数据。一次可能会超过一行。如果存在可选参数* header *且为 true,则下划线将被解码为空格。
binascii.
b2a_qp
(* data * [,* quotetabs , istext , header *])- 使用带引号的可打印编码将二进制数据转换为一行 ASCII 字符。返回值是转换后的行。如果存在可选参数* quotetabs 并且为 true,则所有制表符和空格都将被编码。如果存在可选参数 istext 且为 true,则不对换行符进行编码,但对末尾的空格进行编码。如果存在可选参数 header 并且为 true,则根据 RFC1522,空格将被编码为下划线。如果存在可选参数 header *且为 false,则换行符也会被编码;否则换行可能会破坏二进制数据流。
binascii.
a2b_hqx
(* string *)- 将 binhex4 格式的 ASCII 数据转换为二进制数据,而无需进行 RLE 解压缩。该字符串应包含完整数目的二进制字节,或者(对于 binhex4 数据的最后部分而言)的剩余位为零。
binascii.
rledecode_hqx
(* data *)- 根据 binhex4 标准,对数据执行 RLE 解压缩。该算法在一个字节后使用
0x90
作为重复指示符,后跟一个计数。0
的计数指定0x90
的字节值。该例程返回解压缩后的数据,除非数据 Importing 数据以孤立的重复指示符结尾,在这种情况下会引发Incomplete异常。
- 根据 binhex4 标准,对数据执行 RLE 解压缩。该算法在一个字节后使用
binascii.
rlecode_hqx
(* data *)- 对* data *执行 binhex4 样式的 RLE 压缩并返回结果。
binascii.
b2a_hqx
(* data *)- 执行 hexbin4 二进制到 ASCII 的转换,并返回结果字符串。该参数应该已经被 RLE 编码,并且长度可以被 3 整除(可能最后一个片段除外)。
binascii.
crc_hqx
(* data , crc *)- 计算* data 的 16 位 CRC 值,从初始 crc 开始并返回结果。这使用 CRC-CCITT 多项式 x * 16 * x * 12 * x * 5 1,通常表示为 0x1021.此 CRC 以 binhex4 格式使用。
binascii.
crc32
(* data * [,* crc *])- 从初始 crc 开始计算数据的 32 位校验和 CRC-32.这与 ZIP 文件的校验和一致。由于该算法旨在用作校验和算法,因此不适合用作常规哈希算法。用法如下:
print binascii.crc32("hello world")
# Or, in two pieces:
crc = binascii.crc32("hello")
crc = binascii.crc32(" world", crc) & 0xffffffff
print 'crc32 = 0x%08x' % crc
Note
要在所有 Python 版本和平台上生成相同的数值,请使用 crc32(data)&0xffffffff。如果仅使用打包二进制格式的校验和,则没有必要,因为返回值是正确的 32 位二进制表示形式(与符号无关)。
在 2.6 版中更改:无论平台如何,返回值都在[-2 31,2 31-1]范围内。过去,该值将在某些平台上签名,而在其他平台上不签名。如果希望值与 Python 3 行为匹配,请在值上使用&0xffffffff。
在版本 3.0 中更改:无论平台如何,返回值都是无符号的,且范围为[0,2 ** 32-1]。
binascii.
b2a_hex
(* data *)binascii.
hexlify
(* data *)- 返回二进制* data *的十六进制表示形式。 * data 的每个字节都转换为相应的 2 位十六进制表示形式。因此,结果字符串的长度是 data *长度的两倍。
binascii.
a2b_hex
(* hexstr *)binascii.
unhexlify
(* hexstr *)exception
binascii.
Error
- 错误引发异常。这些通常是编程错误。
exception
binascii.
Incomplete
- 对不完整的数据引发异常。这些通常不是编程错误,但是可以pass读取更多数据然后重试来解决。