全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货  >  详情

浅析Python中的struct模块

来源:千锋教育
发布人:xqq
2023-11-12

推荐

在线提问>>

最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结。

了解c语言的人,一定会知道struct结构体在c语言中的作用,它定义了一种结构,里面包含不同类型的数据(int,char,bool等等),方便对某一结构对象进行处理。而在网络通信当中,大多传递的数据是以二进制流(binarydata)存在的。当传递字符串时,不必担心太多的问题,而当传递诸如int、char之类的基本数据的时候,就需要有一种机制将某些特定的结构体类型打包成二进制流的字符串然后再网络传输,而接收端也应该可以通过某种机制进行解包还原出原始的结构体数据。python中的struct模块就提供了这样的机制,该模块的主要作用就是对python基本类型值与用python字符串格式表示的Cstruct类型间的转化(ThismoduleperformsconversionsbetweenPythonvaluesandCstructsrepresentedasPythonstrings.)。stuct模块提供了很简单的几个函数,下面写几个例子。

1、基本的pack和unpack

struct提供用formatspecifier方式对数据进行打包和解包(PackingandUnpacking)。例如:

importstruct

importbinascii

values=(1,'abc',2.7)

s=struct.Struct('I3sf')

packed_data=s.pack(*values)

unpacked_data=s.unpack(packed_data)

print'Originalvalues:',values

print'Formatstring:',s.format

print'Uses:',s.size,'bytes'

print'PackedValue:',binascii.hexlify(packed_data)

print'UnpackedType:',type(unpacked_data),'Value:',unpacked_data

输出:

Originalvalues:(1,'abc',2.7)

Formatstring:I3sf

Uses:12bytes

PackedValue:0100000061626300cdcc2c40

UnpackedType:Value:(1,'abc',2.700000047683716)

代码中,首先定义了一个元组数据,包含int、string、float三种数据类型,然后定义了struct对象,并制定了format‘I3sf’,I表示int,3s表示三个字符长度的字符串,f表示float。最后通过struct的pack和unpack进行打包和解包。通过输出结果可以发现,value被pack之后,转化为了一段二进制字节串,而unpack可以把该字节串再转换回一个元组,但是值得注意的是对于float的精度发生了改变,这是由一些比如操作系统等客观因素所决定的。打包之后的数据所占用的字节数与C语言中的struct十分相似。

以上内容为大家介绍了浅析Python中的struct模块,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:千锋教育。

相关文章

如何使用python中的add函数?

python中dir函数如何使用?

python中merge函数如何使用?

python中str内置函数总结归纳

python如何将九九乘法表写入到Excel?

开班信息 更多>>

课程名称
全部学科
咨询

HTML5大前端

Java分布式开发

Python数据分析

Linux运维+云计算

全栈软件测试

大数据+数据智能

智能物联网+嵌入式

网络安全

全链路UI/UE设计

Unity游戏开发

新媒体短视频直播电商

影视剪辑包装

游戏原画

    在线咨询 免费试学 教程领取