On this page
binascii —在二进制和 ASCII 之间转换
binascii模块包含许多在二进制和各种 ASCII 编码的二进制表示形式之间进行转换的方法。通常,您不会直接使用这些Function,而应使用uu,base64或binhex之类的包装器模块。 binascii模块包含以更高的速度用 C 编写的低级Function,这些Function由上级模块使用。
Note
a2b_*
函数接受仅包含 ASCII 字符的 Unicode 字符串。其他Function仅接受bytes-like objects(例如bytes,bytearray和其他支持缓冲区协议的对象)。
在版本 3.3 中进行了更改:a2b_*
函数现在接受仅 ASCII 的 unicode 字符串。
binascii模块定义以下Function:
binascii.
a2b_uu
(* string *)- 将单行 uuencoded 数据转换回二进制并返回二进制数据。除最后一行外,各行通常包含 45 个(二进制)字节。行数据后可以跟空格。
binascii.
b2a_uu
(* data ,**,* backtick = False *)- 将二进制数据转换为一行 ASCII 字符,返回值是转换后的行,包括换行符。 * data 的长度最多为 45.如果 backtick *为 true,则零由
'`'
代替空格。
- 将二进制数据转换为一行 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异常。
- 根据 binhex4 标准,对数据执行 RLE 解压缩。该算法在一个字节后使用
在版本 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 *)
也可以使用bytes.fromhex() class 方法访问类似的Function(仅接受文本字符串参数,但对空格更为自由)。
exception
binascii.
Error
- 错误引发异常。这些通常是编程错误。
exception
binascii.
Incomplete
- 对不完整的数据引发异常。这些通常不是编程错误,但是可以pass读取更多数据然后重试来解决。