官方文档:https://docs.python.org/zh-cn/3/library/binascii.html
1、模块介绍
binascii 模块是 Python 标准库中的一个模块,该模块提供了 二进制数据 和 ASCII 字符串之间的各种转换方法(Convert between binary and ASCII)。可以用于十六进制、二进制和Base64的编码和解码。
这在处理二进制数据、加密、解密以及网络通信等方面非常有用。
在计算机系统中,数据可以表示为二进制形式(由0和1组成)。然而,在很多情况下,我们需要将二进制数据转换为可打印的ASCII字符形式,或者将ASCII字符形式的数据转换回二进制形式。binascii
模块正是为了满足这种需求而被引入的。
1.1、包含的函数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 2b_uu(string) 将以ascii编码的一行数据转化为二进制,并且返回二进制数据. b2a_uu(data) 将二进制数据转化为一行以ascii编码的字符,date的最大长度为45.
a2b_base64(string) 将一块base64的数据转换为二进制数据,并返回该二进制数据 b2a_base64(string) 与上面相反
a2b_qp(string[, header]) quoted-printable data->bin,并返回 b2a_qp(data[, quotetabs, istext, header]) 与上面相反
a2b_hqx(string) binhex4格式化的ASCII数据转换为二进制,没有做RLE解压. b2a_hqx(data) 与上相反
rledecode_hqx(data) 按照binhex4标准,对data执行RLE解压 rlecode_hqx(data) 对data执行binhex方式的压缩,并返回结果
crc_hqx(data, crc) 计算data的binhex4的crc值 crc32(data[, crc]) 根据crc,计算crc32(32位检验和数据,然后将结果&0xffffffff(为了在所有Python版本中生成相同的结果,具体不清楚,求指导…)
b2a_hex(data) 返回二进制数据的16进制的表现形式 a2b_hex(data) 与上面相反
hexlify(data) 返回二进制数据的16进制的表现形式 unhexlify(hexstr) 与上面相反
|
1.2、相关内置函数
1 2 3 4 5
| chr():把一个整形转换成ASCII码表中对应的单个字符 ord():把ASCII码表中的字符转换成对应的整形 hex():把十进制转换成16进制字符 oct():把十进制转换成八进制字符 bin():把十进制整形转换成二进制字符
|
2、使用示例
2.1 b2a_hex()
和a2b_hex()
分别用于将二进制数据转换为十六进制表示的ASCII字符串,以及将十六进制表示的ASCII字符串还原回二进制数据。
1 2 3 4 5 6 7 8 9 10
| import binascii
# 将二进制数据转换为十六进制表示的ASCII字符串 binary_data = b'Hello, world!' hex_ascii_data = binascii.b2a_hex(binary_data) print(hex_ascii_data) # 输出:b'48656c6c6f2c20776f726c6421'
# 将十六进制表示的ASCII字符串还原回二进制数据 restored_data = binascii.a2b_hex(hex_ascii_data) print(restored_data) # 输出:b'Hello, world!'
|
2.2、b2a_base64()
和a2b_base64()
用于在二进制数据和Base64编码之间进行转换。Base64编码是一种将二进制数据转换为ASCII字符的常用方法,常用于在网络通信中传输二进制数据。
1 2 3 4 5 6 7 8 9 10
| import binascii
# 将二进制数据转换为Base64编码的ASCII字符串 binary_data = b'Hello, world!' base64_ascii_data = binascii.b2a_base64(binary_data) print(base64_ascii_data) # 输出:b'SGVsbG8sIHdvcmxkIQ==\n'
# 将Base64编码的ASCII字符串还原回二进制数据 restored_data = binascii.a2b_base64(base64_ascii_data) print(restored_data) # 输出:b'Hello, world!'
|
除了上述转换功能,binascii
模块还提供了其他函数,用于处理十六进制数据的校验和计算、CRC(循环冗余校验)校验等。
1 2 3 4 5 6
| import binascii
# 计算十六进制数据的校验和 hex_data = b'68656c6c6f' checksum = binascii.crc32(hex_data) print(checksum) # 输出:3903702262
|
需要注意的是,binascii
模块处理的数据必须是二进制形式(bytes
类型)。在使用时,我们可以使用encode()
和decode()
方法将字符串转换为二进制数据或将二进制数据转换回字符串。
2.3、hexlify()
和 unhexlify()
hexlify()
用于将二进制数据编码为十六进制字符串,unhexlify()
用于将十六进制字符串解码为二进制数据
1 2 3 4 5 6 7 8 9
| import binascii
data = b'hello world' hex_str = binascii.hexlify(data) print(hex_str) # b'68656c6c6f20776f726c64'
hex_str = b'68656c6c6f20776f726c64' data = binascii.unhexlify(hex_str) print(data) # b'hello world'
|