python.转换到C结构或从C结构转换回来.doc_第1页
python.转换到C结构或从C结构转换回来.doc_第2页
python.转换到C结构或从C结构转换回来.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

转换到C结构或从C结构转换回来struct模块允许创建一个等效于C结构的字符串,可以读写那些非Python程序生成的二进制文件。或者用于不同程序的网络通信。因为pickle模块的数据类型只能被Python识别。使用struct需要使用格式字符串,调用struct.pack(format,v1,v2, .)。格式字符如下:字符C类型Python类型cChar长度为1的字符串schar字符串p(pascal字符串)字符串iInt整型(4)IUnsigned int整型或长整型*bSigned char整型Bunsigned char整型hShort整型Hunsigned short整型lLong整型Longunsigned Long长整型fFloat浮点型dDouble浮点型x(pad style)-Pvoid*整型或长整型带有星号的表示依赖于平台的指针是32位还是16位。例如,如下的C结构的等价物用:struct int a;int b;char c;采用值10,20,Z,如下: import struct z=struct.pack(iic,10,20,Z) z012000000000024000000000z从字节串反向转换用struct.unpack(format,data),返回元组: struct.unpack(iic,z)(10,20,Z)传递给unpack的格式字符串一定要说明字符串中的所有数据,否则会产生异常。使用struct.calcsize(format)可以计算给定的格式字符串占用的字节数。可以在格式字符前加上一个编号,表示这个数据类型重复的次数。为了便于理解,可以在格式字符串中的格式字符之间加入空格。重复器编号的运行方式与s(字符串)格式字符稍有差别。重复器会告诉字符串的长度(5s意味着5个字符的字符串)。0s意味着一个空字符串,而0c意味着0字符串。如果C的int和long的大小相同,T格式字符会把给定的编号解包为Python长整型。如果C int比C long小,T把编号转换为Python整数。p格式字符串支持pascal字符串。这种字符串使用第一个字节存储字符串长度,所以最大长度为255字节,其余的截断。如果提供了重复器则是指定整个字符串的字节数,包含长度字节。如果字符串小于指定字节数,则pack会添加空的填充字符。默认时,struct会把字节顺序和结构成员对齐使用当前平台的C编译器使用的格式。通过下表列出的某个修饰符启动自己的格式字符串,可以超越这种行为。例如使用网络序: struct.pack(ic,65535,D) #本机字节序为高序优先377377000000D struct.pack(!ic,65535,D) #强制网络字节序000000377377D修饰符字节顺序对齐大小或!低序优先(网络)无标准=内在的无标准(默认)内在的内在的内在的当使用了一个大小为standard的修饰符,则C short会占据2个字节,int、long、float将使用4个字节,double使用8个字节。如果需要使用对齐,而又不想用(内在的对齐)时,可用x格式字符插入填充字节。如果必须强制一个结构的末端依据特殊类型的对齐规则进行对齐,则可用这种类型的格式代码(计数值为0)。如下例子强制单字符的结构对齐整型边界: struct.pack(c,A)A struct.pack(c0l,A)A000000000P(指针)格式字符只能在本地赋值中使用。可用struct模块读写二进制文件,比如提取.wav文件的前36个字节的文件信息头。内容如下:RIFF(4字节),用于识别文件类型高序优先的长度字段(4字节)WAVE(4字节),用于识别文件类型fmt (4字节)格式定义的子数据块长度(4字节)格式类型(2字节)声道数(2字节)采样频率/Hz(4字节)每秒数据量/字节(4字节)样本字节数/字节(2字节)声道宽度/位(2字节)表示标题的格式字符串: s=open(c:winntmediaringin.wav,r

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论