Python struct模块解析


Posted in Python onJune 12, 2014

python提供了一个struct模块来提供转换。下面就介绍这个模块中的几个方法。

    struct.pack():

struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这里的字符串理解为字节流,或字节数组)。其函数原型为:struct.pack(fmt, v1, v2, ...),参数fmt是格式字符串,关于格式字符串的相关信息下面有所介绍。v1, v2, ...表示要转换的python值。下面的例子将两个整数转换为字符串(字节流):

>>> import struct
>>> a=20
>>> b=400
>>> str=struct.pack('ii',a,b)    #转换成字节流,虽然还是字符串,但是可以在网络上传输
>>> print len(str)               #ii 表示两个int
8                                #可以看到长度为8个字节,正好是两个int型数据的长度
>>> print str
                               #二进制是乱码
>>> print repr(str)
'\x14\x00\x00\x00\x90\x01\x00\x00'   #其中十六进制的 0x00000014, 0x00001009分别表示20和400
>>>

   由此我们就可以任意的进行组包了,比如下面一个打包的例子,只介绍其中的pack

format = "!HH%ds" % len(data)
buffer = struct.pack(format,opcode,blocknumber,data)

 我们要对一个数据进行打包,加上一些个包头,我们根据下面的格式符信息,知道H是unsigned short是2个字节,而s是char型。所以这个buffer就是2个字节的opcode,2个字节的blocknumber,和len长的char。

Python struct模块解析

struct.unpack():

   我们接着上面的例子运行:

>>> a1,a2=struct.unpack('ii',str)
>>> print 'a1',a1
a1 20
>>> print 'a2=',a2
a2= 400

可以看到 “ii”以四个字节为分界,把8个字节的str分成了两个int型的整数。

 struct.calcsize():用来计算特定格式的输出的大小,是几个字节,比如:

>>> struct.calcsize('HH4s')
8
>>> struct.calcsize('ii')
8
>>>
>>> format='!HH%ds' % len('hello python')
>>> struct.calcsize(format)
16
>>>
Python 相关文章推荐
c++生成dll使用python调用dll的方法
Jan 20 Python
Python实例分享:快速查找出被挂马的文件
Jun 08 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
Mar 15 Python
python numpy和list查询其中某个数的个数及定位方法
Jun 27 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
对python中的高效迭代器函数详解
Oct 18 Python
Python 实现子类获取父类的类成员方法
Jan 11 Python
pyQt5实时刷新界面的示例
Jun 25 Python
Python Django模板之模板过滤器与自定义模板过滤器示例
Oct 18 Python
Python 多线程共享变量的实现示例
Apr 17 Python
Python 如何创建一个简单的REST接口
Jul 30 Python
使用Python拟合函数曲线
Apr 14 Python
深度剖析使用python抓取网页正文的源码
Jun 11 #Python
python k-近邻算法实例分享
Jun 11 #Python
浅析python 内置字符串处理函数的使用方法
Jun 11 #Python
python使用正则表达式检测密码强度源码分享
Jun 11 #Python
Python查看多台服务器进程的脚本分享
Jun 11 #Python
Python SQLite3数据库操作类分享
Jun 10 #Python
Python不规范的日期字符串处理类
Jun 10 #Python
You might like
使用php4加速网络传输
2006/10/09 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
PHP error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
基于yaf框架和uploadify插件,做的一个导入excel文件,查看并保存数据的功能
2017/01/24 PHP
详谈php中 strtr 和 str_replace 的效率问题
2017/05/14 PHP
用js实现trim()的解决办法
2013/04/16 Javascript
javascript相等运算符与等同运算符详细介绍
2013/11/09 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
js实现上传图片预览方法
2016/10/25 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
ES5和ES6中类的区别总结
2020/12/21 Javascript
微信小程序实现可拖动悬浮图标(包括按钮角标的实现)
2020/12/29 Javascript
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
2018/01/20 Python
python通过ffmgep从视频中抽帧的方法
2018/12/05 Python
Python3爬虫全国地址信息
2019/01/05 Python
python add_argument()用法解析
2020/01/29 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
python实现四人制扑克牌游戏
2020/04/22 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
浅谈Python里面None True False之间的区别
2020/07/09 Python
python实现控制台输出颜色
2021/03/02 Python
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
欧洲著名的二手奢侈品网站:Vestiaire Collective
2020/03/07 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
大整数数相乘的问题
2012/07/22 面试题
linux面试题参考答案(3)
2012/09/13 面试题
博士研究生自我鉴定范文
2013/12/04 职场文书
入职担保书范文
2014/05/21 职场文书
校运动会广播稿(100篇)
2014/09/12 职场文书
三十年再续同学情倡议书
2019/11/27 职场文书