Python中Struct二进制数据模块

本文介绍了Python中的struct模块,该模块用于从字符串创建和提取打包的二进制数据。文章详细解释了如何使用pack和unpack函数,并给出了具体的格式字符及其含义。此外,还提供了向二进制文件写入数据及从中读取数据的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python的struct模块,用来从字符串创建和提取打包的二进制数据。

pack(fmt, v1, v2, ...) 按照给定的格式(fmt),把数据封装成字符串(实际上是类似于c结构体的字节流)。
unpack(fmt, string) 按照给定的格式(fmt)解析字节流string,返回解析出来的tuple。

Format C Type Python 字节数
x pad byte no value 1
c char string of length 1 1
b signed char integer 1
B unsigned char integer 1
? _Bool bool 1
h short integer 2
H unsigned short integer 2
i int integer 4
I unsigned int integer or long 4
l long integer 4
L unsigned long long 4
q long long long 8
Q unsigned long long long 8
f float float 4
d double float 8
s char[] string 1
p char[] string 1
P void * long

注1.q和Q只在机器支持64位操作时有意思

注2.每个格式前可以有一个数字,表示个数

注3.s格式表示一定长度的字符串,4s表示长度为4的字符串,但是p表示的是pascal字符串

注4.P用来转换一个指针,其长度和机器字长相关

注5.最后一个可以用来表示指针类型的,占4个字节

为了同c中的结构体交换数据,还要考虑有的c或c++编译器使用了字节对齐,通常是以4个字节为单位的32位系统,故而struct根据本地机器字节顺序转换.可以用格式中的第一个字符来改变对齐方式.定义如下:

Character Byte order Size and alignment
@ native native            凑够4个字节
= native standard        按原字节数
< little-endian standard        按原字节数
> big-endian standard       按原字节数
! network (= big-endian)

standard       按原字节数

向一个二进制文件中写入数据。

>>>F = open('data.bin', 'wb')
>>>import struct
>>>data = struct.pack('>i4sh',7,'spam',8)
>>>data
b'\x00\x00\x00\x07spam\x00\x08'
>>>F.write(data)
10
>>>F.close()


从一个二进制文件中读取数据
>>>F = open('data.bin', 'rb')
>>>data = F.read()
>>>data
b'\x00\x00\x00\x07spam\x00\x08'
>>>import struct
>>>values = struct.unpack('>i4sh',data)
>>>values
(7,'spam',8)
注意unpack返回的是一个tuple对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值