您的位置:首页 > 新闻 > 热点要闻 > 国家商务部直销管理系统_美国中国最新军事新闻_seo优化内容_在线看seo网站

国家商务部直销管理系统_美国中国最新军事新闻_seo优化内容_在线看seo网站

2025/1/2 0:40:19 来源:https://blog.csdn.net/2301_78045723/article/details/144748837  浏览:    关键词:国家商务部直销管理系统_美国中国最新军事新闻_seo优化内容_在线看seo网站
国家商务部直销管理系统_美国中国最新军事新闻_seo优化内容_在线看seo网站

struct 是 Python 中的一个内建模块,用于处理 C 语言结构体与 Python 数据类型之间的转换。它允许你将 Python 中的数据打包成二进制格式,或者将二进制数据解包成 Python 数据类型。这在处理二进制数据(如网络通信、文件读写等)时非常有用。

基本用法

打包(Packing)

使用 struct.pack 方法将 Python 数据类型转换为二进制数据。struct.pack 的第一个参数是一个格式字符串,用于指定要打包的数据的类型和顺序;后面的参数是要打包的数据。

格式字符串由多个字符组成,每个字符表示一个数据类型。例如:

  • c:字符(1 字节)
  • b:有符号字符(1 字节)
  • B:无符号字符(1 字节)
  • h:短整型(2 字节)
  • H:无符号短整型(2 字节)
  • i:整型(4 字节)
  • I:无符号整型(4 字节)
  • f:浮点型(4 字节)
  • d:双精度浮点型(8 字节)

还有一些用于指定字节顺序和字节大小的修饰符,如:

  • @:原生字节顺序(默认)
  • =:标准字节顺序(默认)
  • <:小端字节顺序(最低有效字节在前)
  • >:大端字节顺序(最高有效字节在前)
  • !:网络字节顺序(大端)
  • s:字符串(前面必须指定长度)
  • p:指针(用于内部表示)
  • x:填充字节(不占用任何存储空间)

示例:

 

python复制代码

import struct
# 将两个整数打包成二进制数据
packed_data = struct.pack('ii', 1, 2)
print(packed_data) # 输出:b'\x01\x00\x00\x00\x02\x00\x00\x00'
解包(Unpacking)

使用 struct.unpack 方法将二进制数据解包成 Python 数据类型。struct.unpack 的第一个参数是格式字符串,后面是要解包的二进制数据(通常是字节对象)。

示例:

 

python复制代码

import struct
# 之前打包的二进制数据
packed_data = b'\x01\x00\x00\x00\x02\x00\x00\x00'
# 解包二进制数据
unpacked_data = struct.unpack('ii', packed_data)
print(unpacked_data) # 输出:(1, 2)
计算大小(Calculating Size)

使用 struct.calcsize 方法可以计算格式字符串指定的数据在内存中的大小(以字节为单位)。

示例:

 

python复制代码

import struct
# 计算两个整型数据在内存中的大小
size = struct.calcsize('ii')
print(size) # 输出:8

示例应用

假设你有一个包含多个整数和浮点数的二进制文件,你可以使用 struct 模块来读取和写入这个文件。

写入二进制文件
 

python复制代码

import struct
# 要写入的数据
data = [(1, 2.5), (3, 4.5), (5, 6.5)]
# 打开文件用于二进制写入
with open('data.bin', 'wb') as f:
for item in data:
# 打包数据并写入文件
packed_item = struct.pack('if', *item)
f.write(packed_item)
读取二进制文件
 

python复制代码

import struct
# 打开文件用于二进制读取
with open('data.bin', 'rb') as f:
# 计算每条记录的大小
record_size = struct.calcsize('if')
# 读取文件中的所有记录
data = []
while True:
# 从文件中读取一条记录
record = f.read(record_size)
if not record:
break
# 解包记录并添加到列表中
unpacked_record = struct.unpack('if', record)
data.append(unpacked_record)
print(data) # 输出:[(1, 2.5), (3, 4.5), (5, 6.5)]

struct 模块非常强大,适用于各种需要处理二进制数据的场景。通过掌握它的用法,你可以更有效地处理网络通信、文件读写等任务。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com