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 相关文章推荐
pyqt4教程之实现半透明的天气预报界面示例
Mar 02 Python
Python实现二分查找算法实例
May 26 Python
pygame加载中文名mp3文件出现error
Mar 31 Python
Python队列的定义与使用方法示例
Jun 24 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
May 24 Python
python实现三次样条插值
Dec 17 Python
Python 正则表达式匹配字符串中的http链接方法
Dec 25 Python
python 利用jinja2模板生成html代码实例
Oct 10 Python
python、Matlab求定积分的实现
Nov 20 Python
Python Sqlalchemy如何实现select for update
Oct 12 Python
python图片合成的示例
Nov 09 Python
Python datetime模块的使用示例
Feb 02 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源码之explode使用说明
2011/08/05 PHP
json的键名为数字时的调用方式(示例代码)
2013/11/15 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
thinkPHP5 tablib标签库自定义方法详解
2017/05/10 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
不安全的常用的js写法
2009/09/15 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
Javascript学习笔记5 类和对象
2010/01/11 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
2010/12/28 Javascript
jQuery判断checkbox是否选中的3种方法
2014/08/12 Javascript
Javascript定义类(class)的三种方法详解
2015/03/13 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
基于jQuery倾斜打开侧边栏菜单特效代码
2015/09/15 Javascript
JS实现购物车特效
2017/02/02 Javascript
微信小程序获取微信运动步数的实例代码
2017/07/20 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
微信小程序实现的picker多级联动功能示例
2019/05/23 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
修改Python的pyxmpp2中的主循环使其提高性能
2015/04/24 Python
python保留格式汇总各部门excel内容的实现思路
2020/06/01 Python
python中如何打包用户自定义模块
2020/09/23 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
2021/02/07 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
纯CSS3实现鼠标悬停提示气泡效果
2014/02/28 HTML / CSS
NFL Game Pass欧洲:在线观看NFL比赛直播和点播,以高清质量播放
2018/08/30 全球购物
大学生求职推荐信
2013/11/27 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
个人总结与自我评价2015
2015/03/11 职场文书
2015年度电厂个人工作总结
2015/05/13 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
python tkinter模块的简单使用
2021/04/07 Python