C语言中的结构体在Python中实现转换

 更新时间:2022年06月07日 08:57:35   作者:jiangwei0512  
这篇文章主要为大家介绍了C语言中的结构体在Python中实现转换示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

struct介绍

Python中提供了struct接口,用来处理类似C语言中的结构体。

处理的方式是将结构体表现位字符串,这个字符串其实就是结构体的一个个字节。

struct中的常用接口

主要就是两个,pack()和unpack()。

pack()就是将结构体转换成字符串(或者说字节序),unpack()则相反。

pack()

pack()函数的说明如下(来自Python 2.7.15 documentation):

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 documentation):

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接口中最重要的部分。

它可以分为两个部分。

第一部分是字节序顺寻和对其等信息,由如下的字符表示:

这个部分是非必需的,如果没有使用上述的任何一个字符,则默认效果同@。

第二部分的字符表示成员的结构体类型(这决定了各个成员需要用多少个字符串表示),由如下的字符表示:

示例

下面是一个示例(使用Python2.7测试OK):

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,0x01,2是0x02,0x02;3对应到long的字节是0x03,0x00,0x00,0x00。

之后的unpack()函数执行之后返回了tuple,其成员分别是1,2,3。

以上就是C语言中的结构体在Python中实现转换的详细内容,更多关于Python转换C语言结构体的资料请关注脚本之家其它相关文章!

相关文章

  • PythonPC客户端自动化实现原理(pywinauto)

    PythonPC客户端自动化实现原理(pywinauto)

    这篇文章主要介绍了Python基于pywinauto实现PC客户端自动化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • python实现维吉尼亚加密法

    python实现维吉尼亚加密法

    这篇文章主要为大家详细介绍了python实现维吉尼亚加密法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • python将邻接矩阵输出成图的实现

    python将邻接矩阵输出成图的实现

    今天小编就为大家分享一篇python将邻接矩阵输出成图的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • python include标签的使用方式及说明

    python include标签的使用方式及说明

    这篇文章主要介绍了python include标签的使用方式及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • 用Python编写一个简单的CS架构后门的方法

    用Python编写一个简单的CS架构后门的方法

    今天小编就为大家分享一篇关于用Python编写一个简单的CS架构后门的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-11-11
  • Linux系统下升级pip的完整步骤

    Linux系统下升级pip的完整步骤

    这篇文章主要给大家介绍了关于Linux系统下升级pip的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • flask与数据库的交互操作示例

    flask与数据库的交互操作示例

    这篇文章主要为大家介绍了flask与数据库的交互操作示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • wxPython绘图模块wxPyPlot实现数据可视化

    wxPython绘图模块wxPyPlot实现数据可视化

    这篇文章主要为大家详细介绍了wxPython绘图模块wxPyPlot实现数据可视化,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • python实现贪吃蛇小游戏

    python实现贪吃蛇小游戏

    这篇文章主要为大家详细介绍了python实现贪吃蛇小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • 总结Python连接CS2000的详细步骤

    总结Python连接CS2000的详细步骤

    今天给大家带来的是关于Python的相关知识,文章围绕着Python连接CS2000的详细步骤展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06

最新评论