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 26 Python
基于循环神经网络(RNN)实现影评情感分类
Mar 26 Python
3分钟学会一个Python小技巧
Nov 23 Python
详解PANDAS 数据合并与重塑(join/merge篇)
Jul 09 Python
浅谈django2.0 ForeignKey参数的变化
Aug 06 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
Feb 07 Python
Django 博客实现简单的全文搜索的示例代码
Feb 17 Python
Python 随机生成测试数据的模块:faker基本使用方法详解
Apr 09 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
Python3.9.0 a1安装pygame出错解决全过程(小结)
Feb 02 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 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
用缓存实现静态页面的测试
2006/12/06 PHP
PHP读取txt文件的内容并赋值给数组的代码
2011/11/03 PHP
thinkphp3.x自定义Action、Model及View的简单实现方法
2016/05/19 PHP
checkbox全选/取消全选以及checkbox遍历jQuery实现代码
2009/12/02 Javascript
web css实现整站样式互相切换
2013/10/29 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
javascript常见数字进制转换实例分析
2016/04/21 Javascript
微信小程序 wx.request(object) API详解及实例代码
2016/09/30 Javascript
JS数组排序方法实例分析
2016/12/16 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
vue脚手架中配置Sass的方法
2018/01/04 Javascript
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
angularJs中json数据转换与本地存储的实例
2018/10/08 Javascript
Angular使用Restful的增删改
2018/12/28 Javascript
vue 使用class创建和清除水印的示例代码
2020/12/25 Vue.js
Python修改Excel数据的实例代码
2013/11/01 Python
使用Python程序抓取新浪在国内的所有IP的教程
2015/05/04 Python
Python工程师面试题 与Python Web相关
2016/01/14 Python
python发送邮件功能实现代码
2016/07/15 Python
Python 统计字数的思路详解
2018/05/08 Python
Linux下python3.7.0安装教程
2018/07/30 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
业务助理岗位职责
2013/11/18 职场文书
写给女朋友的检讨书
2014/01/28 职场文书
学生党支部先进事迹
2014/02/04 职场文书
元旦红领巾广播稿
2014/02/19 职场文书
陕西导游词
2015/02/04 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
担保贷款承诺书
2015/04/30 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
Redis特殊数据类型bitmap位图
2022/06/01 Redis