Python轻松入门-31 struct模块

视频教程下载链接:http://pan.baidu.com/s/1hrTPy1u

配套教程下载:http://pan.baidu.com/s/1qYdI6q4

这节课,我们来讨论struct模块中的pack和unpack函数。首先,大家需要知道的是:struct可以将任意类型数据,比如说数字,字符串转换为字节数据,那么, struct的这种转换有什么用处呢?以后,我们将会讲解Python网络编程相关的知识,当我们进行网络编程的时候,这时候我们用于网络传输的是字节数据,所以这就是struct模块的用武之地!为了使用struct,首先需要包含struct模块:

 
 
from struct import *
这里,大家可能第一次接触到from import这个句式,所以这里贴出它们的区别
#import Module # 引入模块 #from Module import Other # 引入模块中的类、函数或者变量 #from Module import * # 引入模块中的所有‘公开’成员
然后呢,我们就来将普通数据转换成字节数据,这样就可以方便在网络上传输了。如何将数据转换成字节数据呢?首先,我们创建一个变量Packed_data,然后我们再调用一个pack函数,你可以看到,使用它需要2个参数: 图 6‑1 第一个是fmt,format,也就是数据的格式,第二个参数就是数据的列表了,所以,如果你查看Python函数文档的话,它会告诉你数据格式的形式,比如说我们的数据格式是2个int型,一个float型,那么这里的第一个参数就是:“iif”,如果是5个int型,那么格式就是:“iiiii”,非常简单,这里我们用iif,然后后面我们就可以直接输入对应的数据了,接着我们将字节的数据打印出来:
packed_data = pack("iif",6, 19, 4.73) print(packed_data)
运行: 图 6‑2 你看,首个字母’b’代表的是bytes的意思,然后后面就跟着一系列16进制数据,x代表16进制,所以转换成字节数据后,就方便网络的传输了。 那么接下来,如何将这些字节数据转换回来呢?首先,我们可以计算需要转换的字节的总个数,这里就需要用到内置函数:calcsize,它会计算出需要存储的字节数据的大小:
print(calcsize('i')) print(calcsize('f')) print(calcsize('iif'))
运行: 图 6‑3 我们来分析这个结果,从结果中我们知道int类型占4个字节,float类型也占4个字节,所以iif就占12个字节。没问题。 所以,有了字节数据和它的大小,我们就能够将它转换回去,有pack就有unpack,所以,这里定义一个original_data变量来存储转换回来的数据,然后调用unpack函数: 图 6‑4 它同样需要文件的格式,和二进制的数据: 然后我们把这个数据打印出来:
original_data = unpack('iif', packed_data) print(original_data)
运行: 图 6‑5 就输出了原来的数据,这里4.73后面是因为计算机的计算的误差,没有办法避免。所以,如果你编写的程序,需要使用到字节数据和数字,字符串等数据的转换,这时候,就需要使用到struct模块中的pack和unpack函数了。 更多精彩内容尽在视频中!   本文固定链接:http://www.oxox.work/web/python/struct/ | 虚幻大学

查看原文:http://www.oxox.work/web/python/struct/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚坏叔叔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值