Python 标准库之 binascii - 二进制转化

官方文档: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'

Python 标准库之 binascii - 二进制转化
https://flepeng.github.io/021-Python-32-Python-标准库-Python-标准库之-binascii-二进制转化/
作者
Lepeng
发布于
2016年8月2日
许可协议