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 25 Python
Python Socket传输文件示例
Jan 16 Python
tensorflow 获取变量&打印权值的实例讲解
Jun 14 Python
python flask实现分页的示例代码
Aug 02 Python
Python中的Numpy矩阵操作
Aug 12 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
Jul 06 Python
查看Python依赖包及其版本号信息的方法
Aug 13 Python
python实现大量图片重命名
Mar 23 Python
python实现低通滤波器代码
Feb 26 Python
python 函数嵌套及多函数共同运行知识点讲解
Mar 03 Python
python rsa-oaep加密的示例代码
Sep 23 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中session的实现原理以及大网站应用应注意的问题
2013/06/17 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
thinkPHP中验证码的简单实现方法
2016/12/05 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
JavaScript Base64编码和解码,实现URL参数传递。
2006/09/18 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
鼠标右击事件代码(asp.net后台)
2011/01/27 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
JQuery插入DOM节点的方法
2015/06/11 Javascript
AngularJS指令与控制器之间的交互功能示例
2016/12/14 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
基于Vue插入视频的2种方法小结
2019/04/02 Javascript
单线程JavaScript实现异步过程详解
2020/05/19 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
2020/10/20 Javascript
[01:33]完美世界DOTA2联赛PWL S3 集锦第二期
2020/12/21 DOTA
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
Python探索之爬取电商售卖信息代码示例
2017/10/27 Python
Python实现购物车功能的方法分析
2017/11/10 Python
浅谈python numpy中nonzero()的用法
2018/04/02 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
详解Python 实现 ZeroMQ 的三种基本工作模式
2020/03/24 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
英国家庭珠宝商:T. H. Baker
2018/02/08 全球购物
英国领先的运动物理治疗供应公司:Vivomed
2018/07/14 全球购物
Airbnb爱彼迎官网:成为爱彼迎房东,赚取收入
2019/03/14 全球购物
可口可乐唇膏:Lip Smackers
2019/08/27 全球购物
十月份红领巾广播稿
2014/01/22 职场文书
2014各大专业毕业生自我评价
2014/09/17 职场文书
街道社区活动报告
2015/02/05 职场文书
小学生学习保证书
2015/02/26 职场文书
悬崖上的金鱼姬观后感
2015/06/15 职场文书
行政处罚决定书
2015/06/24 职场文书
Nginx+Tomcat实现负载均衡、动静分离的原理解析
2021/03/31 Servers