python / 3.7.2rc1 / all / library-binascii.html

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


binascii模块包含许多在二进制和各种 ASCII 编码的二进制表示形式之间进行转换的方法。通常,您不会直接使用这些Function,而应使用uubase64binhex之类的包装器模块。 binascii模块包含以更高的速度用 C 编写的低级Function,这些Function由上级模块使用。

Note

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

在版本 3.3 中进行了更改:a2b_*函数现在接受仅 ASCII 的 unicode 字符串。

binascii模块定义以下Function:

  • binascii. a2b_uu(* string *)

    • 将单行 uuencoded 数据转换回二进制并返回二进制数据。除最后一行外,各行通常包含 45 个(二进制)字节。行数据后可以跟空格。
  • binascii. b2a_uu(* data **,* backtick = False *)

    • 将二进制数据转换为一行 ASCII 字符,返回值是转换后的行,包括换行符。 * data 的长度最多为 45.如果 backtick *为 true,则零由'`'代替空格。

在 3.7 版中进行了更改:添加了* backtick *参数。

  • binascii. a2b_base64(* string *)

    • 将 base64 数据块转换回二进制并返回二进制数据。一次可能会超过一行。
  • binascii. b2a_base64(* data **,* newline = True *)

    • 使用 base64 编码将二进制数据转换为一行 ASCII 字符。返回值是转换后的行,如果* newline *为 true,则包括换行符。该函数的输出符合 RFC 3548

在 3.6 版中进行了更改:添加了* newline *参数。

  • binascii. a2b_qp(* data header = False *)

    • 将带引号的可打印数据块转换回二进制并返回二进制数据。一次可能会超过一行。如果存在可选参数* header *且为 true,则下划线将被解码为空格。
  • binascii. b2a_qp(* data quotetabs = False istext = True header = False *)

    • 使用带引号的可打印编码将二进制数据转换为一行 ASCII 字符。返回值是转换后的行。如果存在可选参数* quotetabs 并且为 true,则所有制表符和空格都将被编码。如果存在可选参数 istext 且为 true,则不对换行符进行编码,但对末尾的空格进行编码。如果存在可选参数 header 并且为 true,则空格将按照 RFC 1522编码为下划线。如果存在可选参数 header *且为 false,则换行符也会被编码;否则换行可能会破坏二进制数据流。
  • binascii. a2b_hqx(* string *)

    • 将 binhex4 格式的 ASCII 数据转换为二进制数据,而无需进行 RLE 解压缩。该字符串应包含完整数目的二进制字节,或者(对于 binhex4 数据的最后部分而言)的剩余位为零。
  • binascii. rledecode_hqx(* data *)

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

在版本 3.2 中更改:仅接受字节字符串或字节数组对象作为 Importing。

  • binascii. rlecode_hqx(* data *)

    • 对* data *执行 binhex4 样式的 RLE 压缩并返回结果。
  • binascii. b2a_hqx(* data *)

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

    • 计算* data 的 16 位 CRC 值,从 value 开始作为初始 CRC,然后返回结果。这使用 CRC-CCITT 多项式 x * 16 * x * 12 * x * 5 1,通常表示为 0x1021.此 CRC 以 binhex4 格式使用。
  • binascii. crc32(* data * [,* value *])

    • 从* value 的初始 CRC 开始,计算 data *的 32 位校验和 CRC-32.默认初始 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 中更改:结果始终是未签名的。要在所有 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()方法也可以方便地访问类似的Function(但返回文本字符串)。

如果指定* sep ,则它必须是单个字符 str 或 bytes 对象。它将在每个 bytes_per_sep Importing 字节之后插入输出中。默认情况下,分隔符的位置从输出的右端开始计数,如果希望从左侧开始计数,请提供负的 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 版中进行了更改:添加了* sep bytes_per_sep *参数。

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

也可以使用bytes.fromhex() class 方法访问类似的Function(仅接受文本字符串参数,但对空格更为自由)。

  • exception binascii. Error

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

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

See also

  • Module base64

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

  • Module binhex

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

  • Module uu

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

  • Module quopri

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