千锋教育-做有情怀、有良心、有品质的职业教育机构

浅析Python中的struct模块

来源:千锋教育
发布时间:2023-11-06 17:50:38
分享

最近在学习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增强 Python自身的已有的一些功能可以随着标准库的使用而得到增强。1)文字处理Python的string类提供了对字符串进行处理的方法。更进一步,通过标准库中的re包,Python可以用正则表达式(re
  • Python自定义模块导入方法 Python模块是一个Python文件,以.py结尾,包括了Python对象定义和Python语句,能让Python代码段更有逻辑性、更好用、更易懂,既然Python模块有这么多好处,那么该如何引用P
  • 用Python+OpenCV实现自动扫雷 相信许多人很早就知道有扫雷这么一款经典的游(显卡测试)戏(软件),更是有不少人曾听说过中国雷圣,也是中国扫雷第一、世界综合排名第二的郭蔚嘉的顶顶大名。扫雷作为一款在Windows9x时代就已经诞生的经
  • python unittest控制用例的执行顺序 为什么要进行顺序控制呢?使用过testng的同学就知道,它相对于junit来说有更强大的功能,其中的一个功能就是依赖测试。什么是依赖测试呢?简单的说一下就是,A方法运行时,其中有个变量的取值是B方法的
  • Python使用装饰器在执行单元测试时配置环境 装饰器的定义是给一个对象动态加载功能,就像打游戏时给队友上buff一样。一直以来,我对装饰器用的不多,经常会用别的方式搞定,虽然代码丑一点,但也能用。这次遇到一个特别适合装饰器的应用场景,就是执行单元
  • Python的Unittest单元测试使用详解 PytheM是一个Python渗透测试框架。它只能在osnGNU/LinuxOS系统上运行。安装$sudoapt-getupdate$sudoapt-getinstalllibasound-devli