18.14. binascii —在二进制和 ASCII 之间转换

binascii模块包含许多在二进制和各种 ASCII 编码的二进制表示形式之间进行转换的方法。通常,您不会直接使用这些Function,而应使用uubase64binhex之类的包装器模块。 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异常。
  • 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 *)

    • 返回由十六进制字符串* hexstr *表示的二进制数据。此函数是b2a_hex()的反函数。 * hexstr *必须包含偶数个十六进制数字(可以为大写或小写),否则引发TypeError
  • exception binascii. Error

    • 错误引发异常。这些通常是编程错误。
  • exception binascii. Incomplete

    • 对不完整的数据引发异常。这些通常不是编程错误,但是可以pass读取更多数据然后重试来解决。

See also

  • Module base64

  • 支持以 16、32 和 64 为基数的 RFC 兼容的 base64 样式编码。

  • Module binhex

  • 支持在 Macintosh 上使用的 Binhex 格式。

  • Module uu

  • 支持在 Unix 上使用的 UU 编码。

  • Module quopri

  • 支持 MIME 电子邮件中使用的带引号的可打印编码。