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

来自菜鸟教程
Python/docs/2.7/library/binascii
跳转至:导航、​搜索

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

binascii 模块包含许多方法来在二进制和各种 ASCII 编码的二进制表示之间进行转换。 通常,您不会直接使用这些函数,而是使用包装模块,如 uubase64binhexbinascii 模块包含用 C 编写的低级函数,以提高更高级别模块使用的速度。

binascii 模块定义了以下函数:

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 字节的输入行以获得符合 MIME-base64 标准的输出行。 否则输出符合 RFC 3548
binascii.a2b_qp(string[, header])
将带引号的可打印数据块转换回二进制并返回二进制数据。 一次可以通过不止一行。 如果可选参数 header 存在且为真,则下划线将被解码为空格。
binascii.b2a_qp(data[, quotetabs, istext, header])
以带引号的可打印编码将二进制数据转换为一行 ASCII 字符。 返回值是转换后的行。 如果可选参数 quotetabs 存在且为真,则所有制表符和空格都将被编码。 如果可选参数 istext 存在且为真,则不编码换行符,但将编码尾随空格。 如果可选参数 header 存在且为真,则空格将根据 RFC1522 编码为下划线。 如果可选参数 header 存在且为 false,则换行符也将被编码; 否则换行转换可能会破坏二进制数据流。
binascii.a2b_hqx(string)
将 binhex4 格式的 ASCII 数据转换为二进制,无需进行 RLE 解压缩。 该字符串应包含完整数量的二进制字节,或者(如果是 binhex4 数据的最后一部分)剩余位为零。
binascii.rledecode_hqx(data)
按照 binhex4 标准对数据执行 RLE 解压缩。 该算法在一个字节后使用 0x90 作为重复指示符,然后是一个计数。 0的计数指定0x90的字节值。 该例程返回解压缩的数据,除非数据输入数据以孤立的重复指示符结尾,在这种情况下会引发 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 多项式 x16 + x12 + x5 ] + 1,通常表示为 0x1021。 该 CRC 以 binhex4 格式使用。
binascii.crc32(data[, crc])

计算 CRC-32,数据的 32 位校验和,从初始 crc 开始。 这与 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

笔记

要在所有 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
因数据不完整引发异常。 这些通常不是编程错误,但可以通过读取更多数据并重试来处理。

也可以看看

模块 base64
支持在 base 16、32 和 64 中符合 RFC 的 base64 样式编码。
模块 binhex
支持在 Macintosh 上使用的 binhex 格式。
模块 uu
支持在 Unix 上使用的 UU 编码。
模块 quopri
支持 MIME 电子邮件消息中使用的带引号的可打印编码。