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实现获取域名所用服务器的真实IP
Oct 25 Python
浅谈python和C语言混编的几种方式(推荐)
Sep 27 Python
python pandas中DataFrame类型数据操作函数的方法
Apr 08 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
python 产生token及token验证的方法
Dec 26 Python
Python字典的核心底层原理讲解
Jan 24 Python
Python OS模块实例详解
Apr 15 Python
python 修改本地网络配置的方法
Aug 14 Python
django实现用户注册实例讲解
Oct 30 Python
Pandas时间序列:重采样及频率转换方式
Dec 26 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
Dec 04 Python
Python pyecharts绘制条形图详解
Apr 02 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-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
jQuery+ajax实现顶一下,踩一下效果
2010/07/17 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
javascript数组去重方法汇总
2015/04/23 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
Bootstrap 实现查询的完美方法
2016/10/26 Javascript
Javascript 高性能之递归,迭代,查表法详解及实例
2017/01/08 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
2017/07/18 Javascript
layer弹出层 iframe层去掉滚动条的实例代码
2018/08/17 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
2019/03/30 Javascript
20个必会的JavaScript面试题(小结)
2019/07/02 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
跟老齐学Python之玩转字符串(1)
2014/09/14 Python
Python使用tablib生成excel文件的简单实现方法
2016/03/16 Python
Python中的并发处理之asyncio包使用的详解
2018/04/03 Python
基于python的图片修复程序(实现水印去除)
2018/06/04 Python
Flask web开发处理POST请求实现(登录案例)
2018/07/26 Python
Python数据类型之Dict字典实例详解
2019/05/07 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
Python自动化导出zabbix数据并发邮件脚本
2019/08/16 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
利用python实现汉诺塔游戏
2021/03/01 Python
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
美国折扣香水网站:The Perfume Spot
2020/12/12 全球购物
党校培训自我鉴定范文
2014/04/10 职场文书
教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014年销售助理工作总结
2014/12/01 职场文书
创业计划书之家政服务
2019/09/18 职场文书
详解Js模块化的作用原理和方案
2021/04/29 Javascript
pandas 实现将NaN转换为None
2021/05/14 Python
《黑岩★★射手 DAWN FALL》BD发售宣传CM公开
2022/04/04 日漫