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实现根据窗口标题调用窗口的方法
Mar 13 Python
python多进程共享变量
Apr 06 Python
Python中Django发送带图片和附件的邮件
Mar 31 Python
Python分治法定义与应用实例详解
Jul 28 Python
Python实现句子翻译功能
Nov 14 Python
python爬取网页转换为PDF文件
Jun 07 Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 Python
关于Pycharm无法debug问题的总结
Jan 19 Python
python3连接mysql获取ansible动态inventory脚本
Jan 19 Python
浅谈django 模型类使用save()方法的好处与注意事项
Mar 28 Python
Python文件操作模拟用户登陆代码实例
Jun 09 Python
基于Python爬取素材网站音频文件
Oct 21 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 七大优势分析
2009/06/23 PHP
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
php中session使用示例
2014/03/29 PHP
PHP中调用SVN命令更新网站方法
2015/01/07 PHP
PHP简单实现HTTP和HTTPS跨域共享session解决办法
2015/05/27 PHP
一个完整的PHP类包含的七种语法说明
2015/06/04 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
PHP实现的解汉诺塔问题算法示例
2018/08/06 PHP
jQuery 判断元素上是否绑定了事件
2009/10/28 Javascript
Jquery.LazyLoad.js修正版下载,实现图片延迟加载插件
2011/03/12 Javascript
JavaScript中的console.assert()函数介绍
2014/12/29 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
nodejs中使用多线程编程的方法实例
2015/03/24 NodeJs
jQuery设置和获取select、checkbox、radio的选中值方法
2017/01/01 Javascript
求js数组的最大值和最小值的四种方法
2017/03/03 Javascript
Vue组件tree实现树形菜单
2017/04/13 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
Vue2.0用户权限控制解决方案的示例
2018/02/10 Javascript
nodejs微信开发之自动回复的实现
2019/03/17 NodeJs
angular8和ngrx8结合使用的步骤介绍
2019/12/01 Javascript
echarts 使用formatter 修改鼠标悬浮事件信息操作
2020/07/20 Javascript
12步入门Python中的decorator装饰器使用方法
2016/06/20 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
python实现按关键字筛选日志文件
2019/12/24 Python
基于Tensorflow读取MNIST数据集时网络超时的解决方式
2020/06/22 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
2020/09/21 Python
Django url 路由匹配过程详解
2021/01/22 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
ProBikeKit美国官网:自行车套件,跑步和铁人三项套件
2016/10/13 全球购物
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
园林技术个人的自我评价
2014/02/15 职场文书
学校开学标语
2014/10/06 职场文书
求职自荐信怎么写
2015/03/04 职场文书
关于Numpy之repeat、tile的用法总结
2021/06/02 Python
欧元符号 €
2022/02/17 杂记