Python之binascii模块详解

Python之binascii模块详解

一、模块介绍

binascii模块是Python标准库中的一个模块,该模块提供了二进制数据和ASCII字符串之间的各种转换方法(Convert between binary and ASCII )。可以用于十六进制、二进制和Base64的编码和解码。

1. 包含的函数

函数 描述
a2b_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) 与上面相反

2. 相关内置函数

chr():把一个整形转换成ASCII码表中对应的单个字符
ord():把ASCII码表中的字符转换成对应的整形
hex():把十进制转换成16进制字符
oct():把十进制转换成八进制字符
bin():把十进制整形转换成二进制字符

3. 使用示例

#coding:utf-8
import binascii
a = 'hello world'
#先把a转换成二进制数据然后在用十六进制表示
b = binascii.b2a_hex(a)
c = binascii.hexlify(a)#和a2b_hex()功能是一样的,但是推荐用这个函数,具体不清楚= =
print '{0:10s}'.format('b2a_hex'),
for i in range(0,len(b),2):
    print b[i:i+2],
print
#到这是不是发现了,利用b2a_hex()返回的字符串长度为原串的两倍,因为转换为十六进制,一个字节用两个字节表示了
print '{0:10s}'.format('hexlify'),
for i in range(0,len(c),2):
    print c[i:i+2],   
print
print '{0:10s}'.format('ord'),
for i in a:
    print hex(ord(i))[2:],#手动转换为二进制十六进制
print

#与b2a_hex相反
print binascii.a2b_hex(b)
print binascii.unhexlify(c)
'''
result:
b2a_hex    68 65 6c 6c 6f 20 77 6f 72 6c 64
hexlify    68 65 6c 6c 6f 20 77 6f 72 6c 64
ord        68 65 6c 6c 6f 20 77 6f 72 6c 64
hello world
hello world
'''

Python标准库中的binascii模块提供了一组用于在二进制数据和ASCII字符之间进行转换的功能。这在处理二进制数据、加密、解密以及网络通信等方面非常有用。本文将介绍b``inascii模块的主要功能和使用方法。

在计算机系统中,数据可以表示为二进制形式(由0和1组成)。然而,在很多情况下,我们需要将二进制数据转换为可打印的ASCII字符形式,或者将ASCII字符形式的数据转换回二进制形式。binascii模块正是为了满足这种需求而被引入的。

首先,让我们来了解binascii模块中最常用的两个函数:b2a_hex()a2b_hex()。这两个函数分别用于将二进制数据转换为十六进制表示的ASCII字符串,以及将十六进制表示的ASCII字符串还原回二进制数据。

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!'
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!'

binascii模块还提供了其他一些函数,如b2a_base64()a2b_base64(),用于在二进制数据和Base64编码之间进行转换。Base64编码是一种将二进制数据转换为ASCII字符的常用方法,常用于在网络通信中传输二进制数据。

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(循环冗余校验)校验等

import binascii

# 计算十六进制数据的校验和
hex_data = b'68656c6c6f'
checksum = binascii.crc32(hex_data)
print(checksum)  # 输出:3903702262

需要注意的是,binascii模块处理的数据必须是二进制形式(bytes类型)。在使用时,我们可以使用encode()decode()方法将字符串转换为二进制数据或将二进制数据转换回字符串。

总结一下,binascii模块是Python标准库中用于在二进制数据和ASCII字符之间进行转换的重要工具。它提供了b2a_hex()a2b_hex()b2a_base64()a2b_base64()等函数,使得处理二进制数据和Base64编码变得更加简单和高效。在网络通信、数据加密解密以及数据校验等场景中,合理使用binascii模块将会为Python编程带来更多便利和灵活性。

二、十六进制编解码

binascii模块提供了两个函数用于编解码十六进制字符串,分别是hexlify()和unhexlify()。

函数hexlify()用于将二进制数据编码为十六进制字符串,例如:

import binascii

data = b'hello world'
hex_str = binascii.hexlify(data)
print(hex_str)  # b'68656c6c6f20776f726c64'

函数unhexlify()用于将十六进制字符串解码为二进制数据,例如:

import binascii

hex_str = b'68656c6c6f20776f726c64'
data = binascii.unhexlify(hex_str)
print(data)  # b'hello world'

三、二进制编解码

binascii模块提供了两个函数用于编解码二进制字符串,分别是b2a_base64()和a2b_base64()。

函数b2a_base64()用于将二进制数据编码为Base64字符串,例如:

import binascii

data = b'hello world'
base64_str = binascii.b2a_base64(data)
print(base64_str)  # b'aGVsbG8gd29ybGQ=\n'

函数a2b_base64()用于将Base64字符串解码为二进制数据,例如:

import binascii

base64_str = b'aGVsbG8gd29ybGQ=\n'
data = binascii.a2b_base64(base64_str)
print(data)  # b'hello world'

四、Base64编解码

除了上一节中提到的b2a_base64()和a2b_base64()方法外,binascii模块还提供了其他一些用于Base64编解码的方法,例如:

1. b64encode()

函数b64encode()可以将二进制数据编码为Base64字符串,例如:

import binascii

data = b'hello world'
base64_str = binascii.b64encode(data)
print(base64_str)  # b'aGVsbG8gd29ybGQ='

2. b64decode()

函数b64decode()可以将Base64字符串解码为二进制数据,例如:

import binascii

base64_str = b'aGVsbG8gd29ybGQ='
data = binascii.b64decode(base64_str)
print(data)  # b'hello world'

3. b32encode()和b32decode()

函数b32encode()用于将二进制数据编码为Base32字符串,b32decode()则用于将Base32字符串解码为二进制数据。

4. b16encode()和b16decode()

函数b16encode()用于将二进制数据编码为Base16字符串,b16decode()则用于将Base16字符串解码为二进制数据。

五、总结

binascii模块提供了丰富的二进制数据和ASCII字符串之间的转换方法,包括十六进制、二进制和Base64的编码解码等。在程序开发中,我们可以根据需要使用这些方法来实现数据的转换。

《AUTOSAR谱系分解(ETAS工具链)》之总目录

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值