Python模块——struct(字节流,组包拆包实现)

http://www.linuxidc.com/Linux/2014-02/97158.htm

[日期:2014-02-24]

来源:Linux社区  作者:Linux

[字体:大 中 小]

我们知道python只定义了6种数据类型,字符串,整数,浮点数,列表,元组,字典。但是C语言中有些字节型的变量,在python中该如何实现呢?这点颇为重要,特别是要在网络上进行数据传输的话。   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。       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 的下载地址:请点这里

推荐阅读:

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2014-02/97158.htm

最新文章

  1. .NET基础知识点
  2. 安全退出,清空Session或Cookie
  3. HTML转移字符对照表
  4. 本地计算机 上的 Redis Server 服务启动后停止
  5. hadoop 流streaming跑python程序
  6. C#中的委托、事件和设计模式(转载)
  7. 如何批量转换 WordPress 文章分类
  8. HTTPS协议加密解密全过程(图解)
  9. 1、Python django 框架下的word Excel TXT Image 等文件的上传
  10. Spire.Office for .NET(Word、Excel、PPT、PDF等)
  11. TCP-IP详解学习笔记1
  12. 又谈T检验
  13. Android中高级工程师面试题
  14. Linux下安装jdk8步骤详述
  15. zookeeper的Java客户端API
  16. DevExpress中RibbonControl的简单应用
  17. WebService—CXF整合Spring实现接口发布和调用过程
  18. Mac OS Yosemite 文件批量重命名
  19. Velocity工作原理解析和优化
  20. MSDN版、OEM版、RTM版、VOL版等的区别

热门文章

  1. Singelton单例模式
  2. TestNg测试框架使用笔记
  3. .NET中的三种接口实现方式
  4. WrapPanel流布局的一个简单例子
  5. maven环境快速搭建(转)
  6. Nginx 的RTMP打流模块配置
  7. c++ string的实现。
  8. hdu5816 卡特兰数+dp
  9. Linux之top命令
  10. you don't have permission to view it 解决