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 相关文章推荐
Python3基础之函数用法
Aug 13 Python
python中pycurl库的用法实例
Sep 30 Python
在Debian下配置Python+Django+Nginx+uWSGI+MySQL的教程
Apr 25 Python
以Flask为例讲解Python的框架的使用方法
Apr 29 Python
python itchat实现微信好友头像拼接图的示例代码
Aug 14 Python
python 将md5转为16字节的方法
May 29 Python
Selenium鼠标与键盘事件常用操作方法示例
Aug 13 Python
python高斯分布概率密度函数的使用详解
Jul 10 Python
Python Collatz序列实现过程解析
Oct 12 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 Python
简单了解python关键字global nonlocal区别
Sep 21 Python
Python-OpenCV实现图像缺陷检测的实例
Jun 11 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
PHP HTML JavaScript MySQL代码如何互相传值的方法分享
2012/09/30 PHP
thinkphp中连接oracle时封装方法无法用的解决办法
2013/06/17 PHP
纯PHP生成的一个树叶图片画图例子
2014/04/16 PHP
PHP使用PDO操作数据库的乱码问题解决方法
2016/04/08 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
javascript Array对象基础知识小结
2010/11/16 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
JS根据生日算年龄的方法
2015/05/05 Javascript
浅谈JavaScript超时调用和间歇调用
2015/08/30 Javascript
jQuery遮罩层效果实例分析
2016/01/14 Javascript
JS判断字符串字节数并截取长度的方法
2016/03/05 Javascript
jquery实现(textarea)placeholder自动换行
2016/12/22 Javascript
jQuery实现按比例缩放图片的方法
2017/04/29 jQuery
jquery ajaxfileupload异步上传插件
2017/11/21 jQuery
js数据类型检测总结
2018/08/05 Javascript
vue 指令和过滤器的基本使用(品牌管理案例)
2019/11/04 Javascript
Vue + Node.js + MongoDB图片上传组件实现图片预览和删除功能详解
2020/04/29 Javascript
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
python数字图像处理实现直方图与均衡化
2018/05/04 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
python匿名函数用法实例分析
2019/08/03 Python
与Django结合利用模型对上传图片预测的实例详解
2019/08/07 Python
Python算法中的时间复杂度问题
2019/11/19 Python
appium+python adb常用命令分享
2020/03/06 Python
Delphi笔试题
2016/11/14 面试题
施工安全协议书
2013/12/11 职场文书
正风肃纪剖析材料
2014/02/18 职场文书
优秀家长自荐材料
2014/08/26 职场文书
安全承诺书
2015/01/19 职场文书
公司催款律师函
2015/05/27 职场文书
酒店工程部的岗位职责汇总大全
2019/10/23 职场文书
简述python四种分词工具,盘点哪个更好用?
2021/04/13 Python