python struct模块的使用
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 |
---|---|---|
@(默认) | 本机 | 本机 |
= | 本机 | 标准 |
< | 小端 | 标准 |
> | 大端 | 标准 |
! | network(大端) | 标准 |
Python | 学习交流 | QQ群:579817333 |
格式符
格式符 | 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 |
注意:
- _Bool在C99中定义,如果没有这个类型,则将这个类型视为char,一个字节;
- q和Q只适用于64位机器;
- 每个格式前可以有一个数字,表示这个类型的个数,如s格式表示一定长度的字符串,4s表示长度为4的字符串;4i表示四个int;
- P用来转换一个指针,其长度和计算机相关;
- f和d的长度和计算机相关;
python struct模块的使用相关推荐
- [转载] Python: struct 模块之字节对齐问题
参考链接: Python中的struct模块 P y t h o n Python Python 在二进制写文件时,可以用 s t r u c t struct struct 模块将数据捆绑成结构体转 ...
- python struct 模块
Python没有提供直接的将用户定义的数据类型和文件IO关联起来的功能,但是它提供了struct库(是一个内置库)--我们可以以二进制模式来写这些数据(有趣的是,它真的是设计来讲文本数据写为缓存的) ...
- python struct模块_python struct 模块
struct模块用于二进制和结构体之间的互相转化,此模块中大部分函数接受一个实现了Buffer协议的对象,最常见的实现了Buffer协议的对象包括bytes.bytearray等,大多数像byte数组 ...
- Python - struct模块、partical模块
#partical方法胡定函数第一个参数 #可以使用iter迭代,但是配合iter使用要指定两个参数 #struct.pack()/unpack()只打包/解包四个字节(编码ASCII,虽然是ASC ...
- 用python将照片做成数据集_python实战项目,struct模块的使用,将MNIST数据集转换为bmp图片...
最近学习 tensroflow,用到了入门级的经典数据集 MNIST,MNIST 包含几万张 28x28 像素大小的手写数字.但是它的存储是以字节流的形式存储的,几万张图片存储在一个文件里.一直对其很 ...
- python中struct_Python的Struct模块,用法以及个人理解
简介 python strtuct模块主要在Python中的值于C语言结构之间的转换.可用于处理存储在文件或网络连接(或其它来源)中的二进制数据. 顺序.格式字符 现在先不要看图表,稍后我们回来看.图 ...
- Python基础教程— Struct模块
struct模块提供了用于在字节字符串和Python原生数据类型之间转换函数,比如数字和字符串. 该模块作用是完成Python数值和C语言结构体的Python字符串形式间的转换. 这可以用于处理存储在 ...
- python序列化模块struct_python的struct模块
Python中缺少类似C语言structs这样直接对字节序列进行序列化和反序列化的语法,作为一门脚本语言这是不必要的,但作为一门完整的编程语言必须提供这样的能力,否则不能独立的处理二进制文件和数据流. ...
- python学习day32 黏包 struct模块
为什么会出现黏包问题? 首先只有在TCP协议中才会出现黏包现象 是因为TCP协议是面向流的协议 在发送的数据 传输过程中 有缓存机制 来避免数据丢失 因此 在连续发送小数据的时候 以及接收大小不符的 ...
最新文章
- 3.4.1 流量控制与可靠传输机制
- 写markdown用于Github上readme.md文件
- maven 导入数据库
- Moment.js常见用法总结 1
- SpringCloud 微服务网关Gateway介绍及简单路由配置
- Moss 2007 入门(1) - 功能概述【转】
- 配置SQL Server AlwaysOn高可用性组
- [Win系统][临时方案]系统任务管理器不能使用临时性解决方案
- 每日算法系列【LeetCode 714】买卖股票的最佳时机含手续费
- 考研复习计划怎么做?MindManager来帮你!
- python中的main函数
- 聊聊Dotnetty
- 用acts_as_paranoid 做假删除
- node: rimraf : 无法加载文件 C:\Users\goodDream\AppData\Roaming\npm\rimraf.ps1,因为在
- 现在能聊天的机器人都有哪些?
- php 直接调用ffmpeg 中加水印,如何使用ffmpeg在视频中心添加透明水印?
- php json_decode gbk,,json_decode含gbk字串
- 在Linux7关机命令,linux关机命令
【使用指南】
- steam无法连接到更新服务器的问题
- ipvs命令~创建VS/NAT模式集群
热门文章
- cinder配置多ceph储存池[Ceph and Cinder multi-backend]
- Cocostudio 1.6 下载地址
- android interview 2
- 如何成为强大的程序员?(转)
- CISSP考试通过,现在开始接受各种恭喜。[10-50]
- FreeBSD portupgrade升级你的FreeBSD软件[zt]
- Win XP系统的开机菜单具体含义
- 经常关注的、极具参考价值的网站收集(无限畅想版)
- 【实用】批量成本估算
- 计划订单号码范围用完导致MRP无法运行