binascii — 在二进制和 ASCII 之间转换 — Python 文档
binascii — 在二进制和 ASCII 之间转换
binascii 模块包含许多方法来在二进制和各种 ASCII 编码的二进制表示之间进行转换。 通常,您不会直接使用这些函数,而是使用包装模块,如 uu、base64 或 binhex。 binascii 模块包含用 C 编写的低级函数,以提高更高级别模块使用的速度。
笔记
a2b_*
函数接受仅包含 ASCII 字符的 Unicode 字符串。 其他函数只接受bytes-like objects(如bytes、bytearray等支持缓冲协议的对象)。
3.3 版更改: a2b_*
函数现在接受仅 ASCII 的 unicode 字符串。
binascii 模块定义了以下函数:
- binascii.a2b_uu(string)
- 将一行 uuencoded 数据转换回二进制并返回二进制数据。 除最后一行外,行通常包含 45 个(二进制)字节。 行数据后面可以跟空格。
- binascii.b2a_uu(data, *, backtick=False)
将二进制数据转换为一行 ASCII 字符,返回值为转换后的行,包括换行符。 data的长度最多为45。 如果 backtick 为真,则零由
'`'
代替空格表示。3.7 版更改: 添加 反引号 参数。
- binascii.a2b_base64(string)
- 将一块 base64 数据转换回二进制并返回二进制数据。 一次可以通过不止一行。
- binascii.b2a_base64(data, *, newline=True)
将二进制数据转换为 base64 编码的一行 ASCII 字符。 返回值是转换后的行,如果 newline 为真,则包括换行符。 此函数的输出符合 RFC 3548。
3.6 版变更: 增加了 newline 参数。
- binascii.a2b_qp(data, header=False)
- 将带引号的可打印数据块转换回二进制并返回二进制数据。 一次可以通过不止一行。 如果可选参数 header 存在且为真,则下划线将被解码为空格。
- binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)
- 以带引号的可打印编码将二进制数据转换为一行 ASCII 字符。 返回值是转换后的行。 如果可选参数 quotetabs 存在且为真,则所有制表符和空格都将被编码。 如果可选参数 istext 存在且为真,则不编码换行符,但将编码尾随空格。 如果可选参数 header 存在且为真,则空格将根据 RFC 1522 编码为下划线。 如果可选参数 header 存在且为 false,则换行符也将被编码; 否则换行转换可能会破坏二进制数据流。
- binascii.a2b_hqx(string)
- 将 binhex4 格式的 ASCII 数据转换为二进制,无需进行 RLE 解压缩。 该字符串应包含完整数量的二进制字节,或者(如果是 binhex4 数据的最后一部分)剩余位为零。
- binascii.rledecode_hqx(data)
按照 binhex4 标准对数据执行 RLE 解压缩。 该算法在一个字节后使用
0x90
作为重复指示符,然后是一个计数。0
的计数指定0x90
的字节值。 该例程返回解压缩的数据,除非数据输入数据以孤立的重复指示符结尾,在这种情况下会引发 Incomplete 异常。3.2 版更改: 仅接受 bytestring 或 bytearray 对象作为输入。
- 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 多项式 x16 + x12 + x5 ] + 1,通常表示为 0x1021。 该 CRC 以 binhex4 格式使用。
- binascii.crc32(data[, value])
计算 CRC-32,data 的 32 位校验和,从 value 的初始 CRC 开始。 默认的初始 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 位十六进制表示。 因此,返回的字节对象是 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 版更改: 添加了 sep 和 bytes_per_sep 参数。
- binascii.a2b_hex(hexstr)
binascii.unhexlify(hexstr) 返回十六进制字符串hexstr表示的二进制数据。 该函数是 b2a_hex() 的逆函数。 hexstr 必须包含偶数个十六进制数字(可以是大写或小写),否则会引发 Error 异常。
使用 bytes.fromhex() 类方法也可以访问类似的功能(仅接受文本字符串参数,但对空格更自由)。
- exception binascii.Error
- 错误引发异常。 这些通常是编程错误。
- exception binascii.Incomplete
- 因数据不完整引发异常。 这些通常不是编程错误,但可以通过读取更多数据并重试来处理。