您现在的位置是:网站首页> 编程资料编程资料

Python使用struct库的用法小结_python_

2023-05-26 334人已围观

简介 Python使用struct库的用法小结_python_

struct简介

看到struct这么英文单词,大家应该并不陌生,因为c/c++中就有struct,在那里struct叫做结构体。在Python中也使用struct,这充分说明了这个struct应该和c/c++中的struct有很深的渊源。Python正是使用struct模块执行Python值和C结构体之间的转换,从而形成Python字节对象。它使用格式字符串作为底层C结构体的紧凑描述,进而根据这个格式字符串转换成Python值。

准确地讲,Python没有专门处理字节的数据类型。但由于b'str'可以表示字节,所以,字节数组=二进制str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。

故提供一个库来做转换。

常用函数

struct.pack(format:str, v1, v2, …)

按format的格式打包v1、v2等参数

import struct result = [1,2,3,4,5] print([struct.pack('

struct.unpack(format:str,buffer:bytes)

按format的格式解包buffer数据,注意结果是一个数组

import struct result = bytes.fromhex('10002030000000') print(struct.unpack('

上代码是按小端序列进行解析的

10被解析成了16

0020被解析成了 0x00 + 0x20 * 256 = 32*256 = 8192

30000000被解析成了 0x30 + 0x0 * 256 + 0x0 * 16³ + 0x0 * 256² = 48

struct.calcsize(format:str)

按format的格式计算这个格式本应该的大小

import struct print(struct.calcsize('

B是1个字节,H是2个字节,I是4个字节,共7个字节

format参数的用法

数据

FormatC TypePython字节数
xpad byteNone1
ccharint1
bsigned charint1
Bunsigned charint1
?Boolbool1
hshortint2
Hunsigned shortint2
iintint4
Iunsigned intint4
llongint4
Lunsigned longint4
qlong longint8
Qunsigned long longint8
ffloatfloat4
ddoublefloat8
schar[]bytes1
pchar[]bytes1
Pvoid *int0

描述符

CharacterByte orderSizealignment
@nativenative凑足4个字节
=nativestandard不作变化
<little-endianstandard不作变化
>big-endianstandard不作变化
!network (= big-endian)standard不作变化

到此这篇关于Python使用struct库的用法小结的文章就介绍到这了,更多相关Python使用struct库内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

-六神源码网