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

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:南昌千锋IT培训  >  技术干货  >  浅析Python中的struct模块

浅析Python中的struct模块

来源:千锋教育
发布人:xqq
时间: 2023-11-06 09:28:47

最近在学习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培训机构:千锋教育。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

怎么找到苹果电脑 python安装位置

2023-11-06

用python怎么实现判断素数

2023-11-06

python如何将结果保存

2023-11-06

最新文章NEW

没基础的学python能学会吗?

2023-11-06

如何利用python快速生成大文件

2023-11-06

ubuntu安装python3的几种方式

2023-11-06

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>