python的struct模块

上传人:碎****木 文档编号:220861834 上传时间:2021-12-09 格式:DOCX 页数:5 大小:27.60KB
返回 下载 相关 举报
python的struct模块_第1页
第1页 / 共5页
python的struct模块_第2页
第2页 / 共5页
python的struct模块_第3页
第3页 / 共5页
亲,该文档总共5页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《python的struct模块》由会员分享,可在线阅读,更多相关《python的struct模块(5页珍藏版)》请在金锄头文库上搜索。

1、Python 模块学习 - struct 数据格式转换2009-08-05 01:00Python 是一门非常简洁的语言,对于数据类型的表示,不像其他语言预定义了许多类型(如:在 C#中,光整型就定义了 8 种),它只定义了六种基本 类型:字符串,整数, 浮点数,元组,列表,字典。通过这六种数据类型,我们可以完成大部分工作。但当 Python 需要通过网络与其他的平台进行交互的时 候,必须考虑到将这些数据类型与其他平台或语言之间的类型进行互相转换问题。打个比方:C+写的客户端发送一个 int 型(4 字节)变量的数据到 Python 写的服务器,Python 接收到表示这个整数的 4 个字节数

2、据, 怎么解析成 Python 认识的整数呢? Python 的标准模块 struct 就用来解决这个问题。struct 模块的内容不多,也不是太难,下面对其中最常用的方法进行介绍: 最简单的图解:3s 代表 3 个字节的 string。每个 s 是一个 Byte。(汉字 2 个)。注:10s means a single 10-byte string (python Doc 2.6.2)struct.packstruct.pack 用于将 Python 的值根据格式符,转换为字符串(因为 Python 中没有字节(Byte)类型,可以把这里的字符串理解为字节流,或字节数组)。其函数原型为:

3、struct.pack(fmt, v1, v2, .),参数 fmt 是格式字符串,关于格式字符串的相关信息在下面有所介绍。v1, v2, .表示要转换的 python 值。下面的例子将两个整数转换为字符串(字节流):1. import struct 2.3. a = 204. b = 4005.6. str = struct.pack(ii, a, b)#转换后的 str 虽然是字符串类型,但相当于其他语言中的字节流(字节数组),可以在网络上传输7. print length:, len(str)8. print str9. print repr(str) 10.11. #result12.

4、 #length: 813. #这里是乱码14.#x14x00x00x00x90x01x00x00import struct a = 20 b = 400 str = struct.pack(ii, a, b) #转换后的 str 虽然是字符串类型,但相当于其他语言中的字节流(字节数组),可以在网络上传输 print length:, len(str) print str print repr(str) #- result #length: 8 # -这里是乱码 #x14x00x00x00x90x01x00x00格式符i表示转换为 int,ii表示有两个 int 变量。进行转换后的结果长度为

5、8 个字节(int 类型占用 4 个字节,两个int 为 8 个字 节),可以看到输出的结果是乱码,因为结果是二进制数据,所以显示为乱码。可以使用python 的内置函数 repr 来获取可识别的字符串,其中十六进制的 0x00000014, 0x00000190 分别表示 20 和 400。struct.unpackstruct.unpack 做的工作刚好与 struct.pack 相反,用于将字节流转换成 python 数据类型。它的函数原型为:struct.unpack(fmt, string),该函数返回一个元组。 下面是一个简单的例子:1. str = struct.pack(ii,

6、 20, 400)2. a1, a2 = struct.unpack(ii, str)3. print a1:, a14. print a2:, a2 5.6. #result:7. #a1: 208. #a2: 400str = struct.pack(ii, 20, 400) a1, a2 = struct.unpack(ii, str) print a1:, a1 print a2:, a2 #- result: #a1: 20 #a2: 400struct.calcsizestruct.calcsize 用于计算格式字符串所对应的结果的长度,如:struct.calcsize(ii),

7、返回 8。因为两个 int 类型所占用的长度是 8 个字节。struct.pack_into, struct.unpack_from这两个函数在 Python 手册中有所介绍,但没有给出如何使用的例子。其实它们在实际应用中用的并不多。Google 了很久,才找到一个例子,贴出来共享一下:1. import struct2. from ctypes import create_string_buffer 3.4. buf = create_string_buffer(12)5. print repr(buf.raw) 6.7. struct.pack_into(iii, buf, 0, 1, 2

8、, -1)8. print repr(buf.raw) 9.10.print struct.unpack_from(iii, buf, 0) 11.12.#result13.#x00x00x00x00x00x00x00x00x00x00x00x00 14.#x01x00x00x00x02x00x00x00xffxffxffxff 15.#(1, 2, -1)import struct from ctypes import create_string_buffer buf = create_string_buffer(12) print repr(buf.raw) struct.pack_int

9、o(iii, buf, 0, 1, 2, -1) print repr(buf.raw) print struct.unpack_from(iii, buf, 0) #-result #x00x00x00x00x00x00x00x00x00x00x00x00 #x01x00x00x00x02x00x00x00xffxffxffxff #(1, 2, -1)关于格式字符串在 Python 手册中,给出了 C 语言中常用类型与 Python 类型对应的格式符:格式符x c b B?h HiIl LqC 语言类型pad byte charsigned charunsigned char_Bool shortunsigned short intunsigned int longunsigned longlong longPython 类型注no value string of length 1integerinteger bool integer integer integerinteger or long integerlonglongQunsigned longlonglongffloatfloatdsdoublecharfloatstringpcharstringPvoid *long具体内容请参考 Python 手册 struct 模块

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 教育/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号