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 相关文章推荐
Python random模块(获取随机数)常用方法和使用例子
May 13 Python
Python实现通过文件路径获取文件hash值的方法
Apr 29 Python
Python3利用SMTP协议发送E-mail电子邮件的方法
Sep 30 Python
python实现Flappy Bird源码
Dec 24 Python
详解python运行三种方式
May 13 Python
简单了解django文件下载方式
Feb 10 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
Mar 09 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
Apr 21 Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 Python
详解Python的爬虫框架 Scrapy
Aug 03 Python
几款好用的python工具库(小结)
Oct 20 Python
python基于exchange函数发送邮件过程详解
Nov 06 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 Token(令牌)设计
2008/03/15 PHP
windows下升级PHP到5.3.3的过程及注意事项
2010/10/12 PHP
YII路径的用法总结
2014/07/09 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
javascript中的作用域scope介绍
2010/12/28 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
如何使用json在前后台进行数据传输实例介绍
2013/04/11 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
Javascript中引用示例介绍
2014/02/21 Javascript
基于jQuery实现的旋转彩圈实例
2015/06/26 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
JavaScript中push(),join() 函数 实例详解
2016/09/06 Javascript
遍历json 对象的属性并且动态添加属性的实现
2016/12/02 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
jQuery实现Table表格隔行变色及高亮显示当前选择行效果示例
2017/02/14 Javascript
gulp加批处理(.bat)实现ng多应用一键自动化构建
2017/02/16 Javascript
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
图片加载完成再执行事件的实例
2017/11/16 Javascript
vue 项目中使用Loading组件的示例代码
2018/08/31 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
Vue 解决多级动态面包屑导航的问题
2019/11/04 Javascript
python中sys.argv参数用法实例分析
2015/05/20 Python
快速入手Python字符编码
2016/08/03 Python
关于Python中浮点数精度处理的技巧总结
2017/08/10 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
PYTHON绘制雷达图代码实例
2019/10/15 Python
使用python实现对元素的长截图功能
2019/11/14 Python
python无序链表删除重复项的方法
2020/01/17 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
python针对Oracle常见查询操作实例分析
2020/04/30 Python
三星英国官网:Samsung英国
2018/09/25 全球购物
2015年校务公开工作总结
2015/05/26 职场文书
古诗之感恩老师
2019/10/24 职场文书
python实现图片批量压缩
2021/04/24 Python
HTML基础详解(下)
2021/10/16 HTML / CSS
Python使用plt.boxplot()函数绘制箱图、常用方法以及含义详解
2022/08/14 Python