Python-struct

  • 函数与异常
  • 格式化字符串
    • 字节顺序、大小和对齐
    • 格式化字符

struct——将字节解释为被打包的二进制数据
  此模块在Python 值和表示为 Python 字节对象的 C 结构之间进行转换。
  一些struct函数(struct方法)使用缓冲区参数

函数与异常

  本模块定义了以下几个函数与异常:
exception struct.error
在各种场合提出异常; 参数是一个描述错误的字符串。

struct.pack(format, v1, v2, …)
返回一个字节对象,其中包含根据格式字符串格式打包的值 v1、v2…参数必须与格式要求的值完全匹配。

struct.pack_into(format, buffer, offset, v1, v2, …)
根据格式字符串格式将值 v1、v2… 打包,并将打包后的字节写入可写缓冲区缓冲区,从位置 offset 开始。 请注意,偏移量是必需的参数。

struct.unpack(format, buffer)
根据格式字符串格式从缓冲缓冲区中解包。 结果是一个元组,即使它只包含一个项目。 缓冲区的字节大小必须与格式所需的大小相匹配,如 calcsize() 所反映的。

struct.unpack_from(format, /, buffer, offset=0)
根据格式字符串格式,从偏移位置开始从缓冲区解包。 结果是一个元组,即使它只包含一个项目。 从位置偏移开始的缓冲区大小(以字节为单位)必须至少是格式所需的大小,如 calcsize() 所反映的。

struct.iter_unpack(format, buffer)
根据格式字符串格式从缓冲区中迭代解包。 这个函数返回一个迭代器,它将从缓冲区中读取相同大小的块,直到它的所有内容都被消耗完。 缓冲区的字节大小必须是格式所需大小的倍数,如 calcsize() 所反映的。

每次迭代都会产生一个由格式字符串指定的元组。

3.4 版中的新功能。

struct.calcsize(format)
返回与格式字符串格式相对应的结构的大小(以及 pack(format, …) 生成的字节对象的大小)。

格式化字符串

  格式字符串是用于在打包和解包数据时指定预期布局的机制。它们是从Format Characters构建的,它指定了被打包/解包的数据类型。此外,还有用于控制字节顺序、大小和对齐的特殊字符。

字节顺序、大小和对齐

  格式字符串的第一个字符可用于指示打包数据的字节顺序、大小和对齐方式,如下:

格式化字符

  格式字符具有以下含义;考虑到它们的类型,C 和 Python 值之间的转换应该是显而易见的。“标准大小”列是指使用标准大小时打包值的大小(以字节为单位);也就是说,当格式字符串以’<’、或 中的一个开头’>‘时。使用本机大小时,打包值的大小取决于平台。’!’’=’

在 3.3 版更改:添加了对’n’和’N’格式的支持。
在 3.6 版更改:添加了对’e’格式的支持。

note:

(1) '?'转换代码对应于C99 定义的_Bool类型。如果此类型不可用,则使用char进行模拟。在标准模式下,它总是用一个字节表示。

(2) 尝试使用任何整数转换代码打包非整数时,如果非整数有__index__()方法,则调用该方法以在打包前将参数转换为整数。
在 3.2 版更改:添加了__index__()对非整数方法的使用。

(3) 和转换代码仅适用于本机大小(选择为默认值或使用’n’字节顺序字符)。对于标准大小,您可以使用适合您的应用程序的任何其他整数格式。‘N’’@’

(4) 对于’f’、'd’和’e’转换代码,打包表示使用 IEEE 754 binary32、binary64 或 binary16 格式(分别用于 ‘f’或’d’)‘e’,而不管平台使用的浮点格式如何。

(5) ‘P’格式字符仅可用于本机字节顺序(选择为默认值或使用字节’@‘顺序字符)。字节顺序字符’='根据主机系统选择使用小端或大端排序。struct 模块不会将此解释为原生排序,因此该’P’格式不可用。

(6) IEEE 754 binary16“半精度”类型是在IEEE 754 标准的 2008 年修订版中引入的。它有一个符号位、一个 5 位指数和 11 位精度(显式存储 10 位),并且可以表示近似精度6.1e-05和6.5e+04 全精度之间的数字。C 编译器不广泛支持这种类型:在典型的机器上,无符号的 short 可用于存储,但不能用于数学运算。

  格式字符前面可以有一个整数重复计数。例如,格式字符串’4h’的含义与’hhhh’.

  格式之间的空白字符被忽略;计数及其格式不能包含空格。

  对于’s’格式字符,计数被解释为字节的长度,而不是像其他格式字符那样的重复计数;例如, '10s’表示单个 10 字节字符串,而’10c’表示 10 个字符。如果未给出计数,则默认为 1。对于打包,字符串将被截断或用空字节填充以使其适合。对于解包,生成的字节对象始终具有完全指定的字节数。作为一种特殊情况,'0s’表示单个空字符串(同时 '0c’表示 0 个字符)。

  x当使用其中一种整数格式(‘b’, ‘B’, ‘h’, ‘H’, ‘i’, ‘I’, ‘l’, ‘L’, ‘q’, )打包值时’Q’,如果x超出该格式的有效范围,则struct.error引发。

  在 3.1 版更改:以前,一些整数格式包装了超出范围的值并引发DeprecationWarning了struct.error.

  格式字符对’p’“Pascal 字符串”进行编码,这意味着存储在固定字节数中的短可变长度字符串,由计数给出。存储的第一个字节是字符串的长度,或 255,以较小者为准。字符串的字节如下。如果传入的字符串 pack()太长(长于 count 减 1),则只 count-1存储字符串的前导字节。如果字符串短于 count-1,则用空字节填充它,以便使用精确计数的字节。请注意,对于unpack(),'p’格式字符会消耗 count字节,但返回的字符串不能包含超过 255 个字节。

  对于’?'格式字符,返回值为True或 False。打包时使用参数对象的真值。本机或标准布尔表示中的 0 或 1 将被打包,并且任何非零值将True在解包时。

Python-struct相关推荐

  1. python struct.pack()函数 (返回一个字节对象,其中包含根据格式字符串fmt打包的值v1,v2,...)

    def pack(fmt, *args): # known case of _struct.pack"""pack(fmt, v1, v2, ...) -> byt ...

  2. python struct.calcsize()函数(返回格式字符串fmt描述的结构的字节大小)

    from struct.py def calcsize(fmt): # known case of _struct.calcsize"""calcsize(fmt) -& ...

  3. python struct pack解析_python struct pack

    这个struct主要是用来处理C结构数据的,读入时先转换为Python的字符串类型,然后再转换为Python的结构化类型,比如元组(tuple)啥的~ 一般输入的渠道来源于文件或者网络的二进制流. 在 ...

  4. python format 槽中槽_printf中的槽和实参--对比python struct包

    在一个很简单的printf调用中: printf( "blit (T:%d, L:%d, W:%d, H:%d) to (T:%d, L:%d, W:%d, H:%d) costs %d t ...

  5. python struct模块的使用

    struct模块中的函数 函数 return explain pack(fmt,v1,v2-) string 按照给定的格式(fmt),把数据转换成字符串(字节流),并将该字符串返回. pack_in ...

  6. Python struct与小端存储

    在使用Python 实现字符向字节数据类型转换的时候,Python没有提供专门处理字节的数据类型,不过Python提供了一个Struct模块提供bytes和其他二进制数据类型的转换 pack(),将任 ...

  7. python struct 官方文档

    from python3.6 7.1.struct-解释字节打包二进制数据 源代码: Lib / struct.py 此模块在Python值和表示为Python bytes对象的C结构之间执行转换.除 ...

  8. python struct pack一个数组_Python中struct.pack的一个疑问

    展开全部 的确很奇怪.我试验了10几分钟,你按下面的方法来做就可以正确.import struct zzz = ("{Type:2}").encode("utf-8&qu ...

  9. python struct pack解析_Python struct 详解

    最近在学习python网络编程这一块,在写简单的socket通信代码时,遇到了struct这个模块的使用,当时不太清楚这到底有和作用,后来查阅了相关资料大概了解了,在这里做一下简单的总结. 了解c语言 ...

  10. python struct pack string_struct (String) – Python 中文开发手册

    Python 中文开发手册 struct (String) - Python 中文开发手册 该模块执行Python值与C结构之间的转换,表示为Python字符串.这可用于处理存储在文件或网络连接中的二 ...

最新文章

  1. 无线电能接收初步测试
  2. java内存溢出排查jstack_Java命令行监控工具(jmap,jstack,jstat,jinfo,jps)
  3. python做的项目管理软件_幽雅的使用Python之软件管理
  4. 计算机网络实验(华为eNSP模拟器)——第六章 密码模式和AAA模式
  5. Hollowjars,部署扫描程序以及Wildfly群体为何很棒
  6. JSTL标签用法:c:choosec:forEachc:ifc:whenc:set
  7. 编程之美——数字哑谜
  8. mysql时间函数now()_获得当前日期时间的mysql函数now()
  9. codeproject
  10. 第十一章 Mock.js 数据生成器
  11. ThinkPad T470P拆机加固态硬盘 建兴 T11 plus
  12. 曲线运动与万有引力公式_高中物理公式大总结:曲线运动、万有引力
  13. 制作可被svchost调用的服务(下)
  14. Android源码目录结构,以Android2.1为例
  15. 知识付费的8个小问题
  16. 双臂魔方机器人的学习
  17. 使用huggingface的Transformers预训练自己的bert模型+FineTuning
  18. 移动开发者大会 -- 后感
  19. 【Blender】基础物体建模(2)
  20. nvm介绍、nvm下载、安装与使用

热门文章

  1. NOI试题(题目+答案)(二)
  2. java mis系统_关于使用Java开发Mis系统
  3. Windows10系统教育版和专业版区别在哪里?
  4. elementUI 日期时间选择器el-date-picker开始时间与结束时间约束
  5. sm缩写代表什么意思_狗狗各种表情都分别代表着什么意思
  6. 写一个函数,求一个字符串的长度。
  7. 2020年开始,中国程序员前景一片灰暗,是这样吗?
  8. cc2430的中文资料
  9. 怪兽星座欲并购,运动饮料成为新战场?
  10. 安装Office2013提示错误1706的解决方法