Python使用struct库的用法小结

 更新时间:2022年05月09日 11:40:35   作者:serfend  
struct模块执行Python值和以Python bytes表示的C结构体之间的转换,这可以用于处理存储在文件中或来自网络连接以及其他源的二进制数据,下面介绍下Python使用struct库的用法,感兴趣的朋友一起看看吧

struct简介

看到struct这么英文单词,大家应该并不陌生,因为c/c++中就有struct,在那里struct叫做结构体。在Python中也使用struct,这充分说明了这个struct应该和c/c++中的struct有很深的渊源。Python正是使用struct模块执行Python值和C结构体之间的转换,从而形成Python字节对象。它使用格式字符串作为底层C结构体的紧凑描述,进而根据这个格式字符串转换成Python值。

准确地讲,Python没有专门处理字节的数据类型。但由于b'str'可以表示字节,所以,字节数组=二进制str。而在C语言中,我们可以很方便地用struct、union来处理字节,以及字节和int,float的转换。

故提供一个库来做转换。

常用函数

struct.pack(format:str, v1, v2, …)

按format的格式打包v1、v2等参数

import struct
result = [1,2,3,4,5]
print([struct.pack('<B', x) for x in result])
# [b'\x01', b'\x02', b'\x03', b'\x04', b'\x05']

struct.unpack(format:str,buffer:bytes)

按format的格式解包buffer数据,注意结果是一个数组

import struct
result = bytes.fromhex('10002030000000')
print(struct.unpack('<BHI', result))
# (16, 8192, 48)

上代码是按小端序列进行解析的

10被解析成了16

0020被解析成了 0x00 + 0x20 * 256 = 32*256 = 8192

30000000被解析成了 0x30 + 0x0 * 256 + 0x0 * 16³ + 0x0 * 256² = 48

struct.calcsize(format:str)

按format的格式计算这个格式本应该的大小

import struct
print(struct.calcsize('<BHI')) # 7

B是1个字节,H是2个字节,I是4个字节,共7个字节

format参数的用法

数据

FormatC TypePython字节数
xpad byteNone1
ccharint1
bsigned charint1
Bunsigned charint1
?Boolbool1
hshortint2
Hunsigned shortint2
iintint4
Iunsigned intint4
llongint4
Lunsigned longint4
qlong longint8
Qunsigned long longint8
ffloatfloat4
ddoublefloat8
schar[]bytes1
pchar[]bytes1
Pvoid *int0

描述符

CharacterByte orderSizealignment
@nativenative凑足4个字节
=nativestandard不作变化
<little-endianstandard不作变化
>big-endianstandard不作变化
!network (= big-endian)standard不作变化

到此这篇关于Python使用struct库的用法小结的文章就介绍到这了,更多相关Python使用struct库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现直方图均衡基本原理解析

    Python实现直方图均衡基本原理解析

    这篇文章主要介绍了Python实现直方图均衡基本原理,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-08-08
  • Python中的TCP socket写法示例

    Python中的TCP socket写法示例

    最近在学习脚本语言python,所以下面这篇文章主要给大家介绍了关于Python中TCP socket写法的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或工作具有一定的参考学习价值,需要的朋友们一起来看看吧
    2018-05-05
  • python 中Mixin混入类的使用方法详解

    python 中Mixin混入类的使用方法详解

    这篇文章主要介绍了python 中Mixin混入类的使用方法详解,Mixin 混入也可以说是编程模式,并不是什么新的语法,用好混入类可以使自己的代码结构清晰,功能明了,所以以后在设计类时要多考虑使用Mixin混入类的实现方式
    2022-07-07
  • 简单了解python调用其他脚本方法实例

    简单了解python调用其他脚本方法实例

    这篇文章主要介绍了简单了解python调用其他脚本方法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • python从入门到精通(DAY 3)

    python从入门到精通(DAY 3)

    本文是python从入门到精通系列文章的第三篇,主要是给大家讲诉做的一个编写登陆接口练习程序的全过程,非常的细致,有需要的小伙伴可以参考下。
    2015-12-12
  • Python玩转Excel的读写改实例

    Python玩转Excel的读写改实例

    今天小编就为大家分享一篇关于Python玩转Excel的读写改实例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • python使用xmlrpc实例讲解

    python使用xmlrpc实例讲解

    这篇文章主要介绍了python中使用xmlrpc的实例,大家参考使用吧
    2013-12-12
  • 使用Python发送邮件附件以定时备份MySQL的教程

    使用Python发送邮件附件以定时备份MySQL的教程

    这篇文章主要介绍了使用Python发送邮件附件以定时备份MySQL的教程,本文的示例基于CentOS,需要的朋友可以参考下
    2015-04-04
  • python翻译软件实现代码(使用google api完成)

    python翻译软件实现代码(使用google api完成)

    这篇文章主要介绍了python结合google api完成的翻译软件实现代码,大家参考使用
    2013-11-11
  • python3使用QQ邮箱发送邮件

    python3使用QQ邮箱发送邮件

    这篇文章主要为大家详细介绍了python3使用QQ邮箱发邮件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01

最新评论