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处理文本文件并生成指定格式的文件
Jul 31 Python
Django1.7+python 2.78+pycharm配置mysql数据库教程
Nov 18 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
python妹子图简单爬虫实例
Jul 07 Python
Python 字典与字符串的互转实例
Jan 13 Python
Python-OpenCV基本操作方法详解
Apr 02 Python
python自定义线程池控制线程数量的示例
Feb 22 Python
Django使用中间件解决前后端同源策略问题
Sep 02 Python
使用Django实现把两个模型类的数据聚合在一起
Mar 28 Python
python中rc1什么意思
Jun 19 Python
python3.5的包存放的具体路径
Aug 16 Python
获取CSDN文章内容并转换为markdown文本的python
Sep 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
mysql 字段类型说明
2007/04/27 PHP
php导入模块文件分享
2015/03/17 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
Laravel框架实现抢红包功能示例
2019/10/31 PHP
jQuery 中关于CSS操作部分使用说明
2007/06/10 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
如何在JavaScript中实现私有属性的写类方式(一)
2013/12/04 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
javascript中使用new与不使用实例化对象的区别
2015/06/22 Javascript
JS获取当前脚本文件的绝对路径
2016/03/02 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
Angular将填入表单的数据渲染到表格的方法
2017/09/22 Javascript
利用js编写网页进度条效果
2017/10/08 Javascript
Nodejs中的require函数的具体使用方法
2019/04/02 NodeJs
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
js实现贪吃蛇小游戏(加墙)
2020/07/31 Javascript
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
Python异常处理知识点总结
2019/02/18 Python
Python解析json时提示“string indices must be integers”问题解决方法
2019/07/31 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
利用python3 的pygame模块实现塔防游戏
2019/12/30 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
美国婚礼装饰和活动用品批发供应商:Event Decor Direct
2018/10/12 全球购物
2014年国培研修感言
2014/03/09 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
学校节水倡议书
2015/04/29 职场文书
法定代表人免职证明
2015/06/24 职场文书
教师节简报
2015/07/20 职场文书
2015党建工作简报
2015/07/21 职场文书
婚礼答谢词范文
2015/09/29 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
新手,如何业余时间安排好写作、提高写作能力?
2019/10/21 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
Win11 25163.1010更新补丁KB5016904推送,测试服务验证管道(附更新修复汇总)
2022/07/23 数码科技