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 数据库 (sqlite3)应用
Dec 07 Python
python3 模拟登录v2ex实例讲解
Jul 13 Python
numpy数组拼接简单示例
Dec 15 Python
SVM基本概念及Python实现代码
Dec 27 Python
一道python走迷宫算法题
Jan 22 Python
python实现媒体播放器功能
Feb 11 Python
Python3爬虫学习入门教程
Dec 11 Python
Python实现的拉格朗日插值法示例
Jan 08 Python
Python玩转加密的技巧【推荐】
May 13 Python
Django如何简单快速实现PUT、DELETE方法
Jul 24 Python
Python的PIL库中getpixel方法的使用
Apr 09 Python
TensorFlow保存TensorBoard图像操作
Jun 23 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
优化NFR之一 --MSSQL Hello Buffer Overflow
2006/10/09 PHP
php gzip压缩输出的实现方法
2013/04/27 PHP
php ci框架验证码实例分析
2013/06/26 PHP
php获得用户ip地址的比较不错的方法
2014/02/08 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
关于laravel 数据库迁移中integer类型是无法指定长度的问题
2019/10/09 PHP
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
jQuery 图片切换插件(代码比较少)
2012/05/07 Javascript
javascript 兼容各个浏览器的事件
2015/02/04 Javascript
跟我学习javascript创建对象(类)的8种方法
2015/11/20 Javascript
js实现分割上传大文件
2016/03/09 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
彻底解决 webpack 打包文件体积过大问题
2017/07/07 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
使用elementUI实现将图片上传到本地的示例
2018/09/04 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
js屏蔽F12审查元素,禁止修改页面代码等实现代码
2020/10/02 Javascript
React实现todolist功能
2020/12/28 Javascript
如何在JavaScript中使用localStorage详情
2021/02/04 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
mysql 之通过配置文件链接数据库
2017/08/12 Python
Python可以实现栈的结构吗
2020/05/27 Python
如何使用Python自动生成报表并以邮件发送
2020/10/15 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
ziaja齐叶雅官方海外旗舰店:来自波兰的天然护肤品牌
2017/01/02 全球购物
来自Ocado的宠物商店:Fetch
2018/07/10 全球购物
美赞臣新加坡官方旗舰店:Enfagrow新加坡
2019/05/15 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
销售经理工作检讨书
2015/02/19 职场文书
寒假社会实践个人总结
2015/03/06 职场文书