用处

  1. 按照指定格式将Python数据转换为字符串,该字符串为字节流,如网络传输时,不能传输int,此时先将int转化为字节流,然后再发送;
  2. 按照指定格式将字节流转换为Python指定的数据类型;
  3. 处理二进制数据,如果用struct来处理文件的话,需要用’wb’,’rb’以二进制(字节流)写,读的方式来处理文件;
  4. 处理c语言中的结构体;
 

struct模块中的函数

函数 return explain
pack(fmt,v1,v2…) string 按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回.
pack_into(fmt,buffer,offset,v1,v2…) None 按照给定的格式(fmt),将数据转换成字符串(字节流),并将字节流写入以offset开始的buffer中.(buffer为可写的缓冲区,可用array模块)
unpack(fmt,v1,v2…..) tuple 按照给定的格式(fmt)解析字节流,并返回解析结果
pack_from(fmt,buffer,offset) tuple 按照给定的格式(fmt)解析以offset开始的缓冲区,并返回解析结果
calcsize(fmt) size of fmt 计算给定的格式(fmt)占用多少字节的内存,注意对齐方式
 

格式化字符串

当打包或者解包的时,需要按照特定的方式来打包或者解包.该方式就是格式化字符串,它指定了数据类型,除此之外,还有用于控制字节顺序、大小和对齐方式的特殊字符.

对齐方式

为了同c中的结构体交换数据,还要考虑c或c++编译器使用了字节对齐,通常是以4个字节为单位的32位系统,故而struct根据本地机器字节顺序转换.可以用格式中的第一个字符来改变对齐方式.定义如下

Character Byte order Size Alignment
@(默认) 本机 本机 本机,凑够4字节
= 本机 标准 none,按原字节数
< 小端 标准 none,按原字节数
> 大端 标准 none,按原字节数
! network(大端) 标准 none,按原字节数
 

格式符

格式符 C语言类型 Python类型 Standard size
x pad byte(填充字节) no value  
c char string of length 1 1
b signed char integer 1
B unsigned char integer 1
? _Bool bool 1
h short integer 2
H unsigned short integer 2
i int integer 4
I(大写的i) unsigned int integer 4
l(小写的L) long integer 4
L unsigned long long 4
q long long long 8
Q unsigned long long long 8
f float float 4
d double float 8
s char[] string  
p char[] string  
P void * long  

注- -!

  1. _Bool在C99中定义,如果没有这个类型,则将这个类型视为char,一个字节;
  2. q和Q只适用于64位机器;
  3. 每个格式前可以有一个数字,表示这个类型的个数,如s格式表示一定长度的字符串,4s表示长度为4的字符串;4i表示四个int;
  4. P用来转换一个指针,其长度和计算机相关;
  5. f和d的长度和计算机相关;

最新文章

  1. nodejs中流(stream)的理解
  2. Android之UI编程(一):线性布局
  3. 【LeetCode OJ】Minimum Depth of Binary Tree
  4. DOM LOAD测试笔记
  5. jquery的一些用法
  6. 将word转化为swf 进行如同百度文库的般阅读
  7. 通过正则表达式获取url中参数
  8. struts2标签自动错行、换行问题
  9. Windows 2008 R2安装.NET Framework 4提示灾难性故障解决方法
  10. Eclipse安装反编译工具JadClipse for Eclipse手把手教程
  11. (转)JAVA新特征
  12. 浅谈Verilog HDL代码编写风格
  13. CF_229E_Gift_概率DP+组合数学
  14. c# ef 排序字段动态,构建动态Lambda和扩展方法OrderBy
  15. 手机端-ajax跨域请求滚屏分页
  16. java jdk 打开出错 Failed to load the JNI shared library
  17. java.io.IOException: Could not find status of job:job_1534233312603_0002
  18. js 面试题总结
  19. PyQt:eg4
  20. UCOS2系统内核讲述(二)_初始化调用函数

热门文章

  1. [SCSS] Convert SCSS Variable Arguments to JavaScript
  2. codeforces Round #258(div2) C解题报告
  3. 【转】selenium自动化测试环境搭建
  4. SRM 622 D2L3: Subsets, math, backtrack
  5. androidstudio集成ijkplayer教程
  6. 【NOIP 2009】 Hankson的趣味题
  7. hiho一下第76周《Suzhou Adventure》
  8. python 网络通讯 服务器端代码demo,能够同时处理多个客户端的连接请求
  9. C# 委托、事件
  10. 超级简单的利用javascript实现文件拖拽事件