Python二进制格式

一、二进制数据记录格式

struct 模块提供了 pack() 和 unpack() 函数,用于处理不定长度的二进制记录格式。下面的例子展示了在不使用 zipfile 模块的情况下,如何循环遍历一个 ZIP 文件的所有头信息。Pack 代码 "H" 和 "I" 分别代表两字节和四字节无符号整数。"<" 代表它们是标准尺寸的小端字节序:

import struct
with open('myfile.zip', 'rb') as f:
data = f.read()
start = 0
for i in range(3): # show the first 3 file headers
start += 14
fields = struct.unpack('<IIIHH', data[start:start+16])
crc32, comp_size, uncomp_size, filenamesize, extra_size = fields
start += 16
filename = data[start:start+filenamesize]
start += filenamesize
extra = data[start:start+extra_size]
print(filename, hex(crc32), comp_size, uncomp_size)
start += extra_size + comp_size # skip to the next header

二、二进制位运算

Python内置支持二进制位运算,包括按位与(&)、按位或(|)、异或(^)、取反(~)和左/右移位(<<和>>)等操作。这些操作可以用于对二进制数进行各种计算和转换。

a = 0b1100 & 0b1010 # 按位与
b = 0b1100 | 0b1010 # 按位或
c = 0b1100 ^ 0b1010 # 异或
d = ~0b1100 # 取反
e = 0b1100 << 2 # 左移2位
f = 0b1100 >> 2 # 右移2位

以上代码将a、b、c、d分别赋值为按位与、按位或、异或、取反的结果,e、f分别赋值为左/右移位的结果,输出即为:

a = 0b1000
b = 0b1110
c = 0b0110
d = -13
e = 0b110000
f = 0b000011

三、二进制文件操作

在Python中,可以使用二进制模式打开文件进行读写操作。在二进制模式下,文件的数据将以二进制格式进行读写,而不是文本格式。如:

f = open('test.bin', 'wb') # 以二进制模式写入
f.write(b'\x31\x32\x33') # 写入字节流
f.close()
f = open('test.bin', 'rb') # 以二进制模式读取
data = f.read() # 读取字节流
f.close()
print(data) # 输出b'123'

以上代码演示了如何使用二进制模式读写文件,在写入时以字节流的形式写入,读取时也以字节流的形式读取,输出即为字节流的形式b'123'。

四、二进制转换

在Python中,可以将二进制转换为十进制、十六进制等不同进制数。如:

a = int('1010', 2) # 二进制转十进制
b = hex(0b1010) # 二进制转十六进制
c = bin(0xABCD) # 十六进制转二进制

以上代码将a、b、c分别赋值为二进制转十进制、二进制转十六进制、十六进制转二进制的结果,输出即为:

a = 10
b = '0xa'
c = '0b1010101111001101'
广告合作
QQ群号:707632017

温馨提示:

1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com。(#改为@)

2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。

目录