Python使用struct模块处理C语言结构体

顾星河
顾星河
发布时间:2026-10-16| 6人浏览过
原创

本文介绍Python中struct模块如何模拟C语言结构体。通过pack()将数据打包为字节字符串,利用unpack()还原为元组。重点解析fmt格式字符串,包括字节序、对齐方式及类型字符,并结合hhl格式示例演示具体转换过程与结果。

struct介绍

Python内置了struct模块,用于处理类似C语言中的结构体数据。

其核心机制是将结构体序列化为字符串,该字符串实际由结构体的各个字节组成。

struct中的常用接口

该模块主要提供两个核心函数:pack()和unpack()。

pack()负责将结构体数据转换为字符串(即字节序列),而unpack()执行相反操作,将字符串还原为原始数据。

pack()

pack()函数的具体说明如下(参考Python 2.7.15文档):

struct.pack(fmt, v1, v2, ...) 
Return a string containing the values v1, v2, ... packed according to the given format. 
The arguments must match the values required by the format exactly.

fmt参数是一个特殊字符串,用于定义结构体的格式规范。

v1、v2等参数对应结构体中的各个成员变量。

该函数返回一个字符串对象。

unpack()

unpack()函数的具体说明如下(参考Python 2.7.15文档):

struct.unpack(fmt, string) 
Unpack the string (presumably packed by pack(fmt, ...)) according to the given format. 
The result is a tuple even if it contains exactly one item. 
The string must contain exactly the amount of data required by the format (len(string) must equal calcsize(fmt)).

fmt参数与pack()中的定义相同。

string参数是由pack()转换生成的字符串(即字节序列)。

该函数返回一个元组,其中包含解包后的各个结构体成员变量。

fmt

fmt是struct模块中最关键的部分。

它可以拆分为两个主要部分。

第一部分指定字节序和对齐信息,由以下字符表示:

此部分为可选,若未指定任何字符,则默认行为等同于使用'@'。

第二部分字符表示成员的数据类型,这决定了每个成员在字符串中占用的字节数,具体对应关系如下:

示例

以下是一个测试通过的示例(基于Python 2.7):

import struct
if __name__ == "__main__":
    result = struct.pack('hhl', 1, 2, 3)            # result is byte string.
    for i in result:
        print '0x%02x' % ord(i)                     # 01 00 02 00 03 00 00 00
    result1 = struct.unpack ('hhl', result)         # byte string is transfered to tuple.
    print type (result1)                            # the type is tuple.
    print result1                                   # (1, 2, 3)

首先调用pack(),参数'hhl'表示包含三个成员,类型分别为short、short和long,对应的值分别为1、2、3。

执行pack()后返回的字节序列如代码右侧注释所示。

由于此处使用默认的大小端和对齐方式(本机为小端模式),因此值1对应short的字节为0x01、0x00,值2对应short的字节为0x02、0x00,值3对应long的字节为0x03、0x00、0x00、0x00。

随后执行unpack()函数,返回一个元组,其成员分别为1、2、3。

以上即为Python中使用struct模块转换C语言结构体的完整流程,更多相关技术资料请参阅本站其他文章。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。