Python结构体转换的实现是怎样,struct接口有什么
Admin 2022-08-12 群英技术资讯 1435 次浏览
这篇文章给大家分享的是“Python结构体转换的实现是怎样,struct接口有什么”,对大家学习和理解有一定的参考价值和帮助,有这方面学习需要的朋友,接下来就跟随小编一起学习一下吧。Python中提供了struct接口,用来处理类似C语言中的结构体。
处理的方式是将结构体表现位字符串,这个字符串其实就是结构体的一个个字节。
主要就是两个,pack()和unpack()。
pack()就是将结构体转换成字符串(或者说字节序),unpack()则相反。
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()函数的说明如下(来自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是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。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
pandas里怎样处理缺失值为NaN的情况?Python中我们用pandas处理数据非常的方便,但是也常会遇到一些问题。例如andas中NaN缺失值的情况,一些新手朋友可能不太清楚怎样解决,下面给大家分享两种处理pandas中NaN缺失值的方法,有需要的朋友可以参考。
这篇文章主要为大家详细介绍了python实现学生管理系统开发,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文主要介绍了python自动化实现的简单使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
结合网上教学内容,指向yield就是迭代器,如果对yield并理解,大家暂且可以把yield理解成“return”,其使用方法与return大致相同,但含义有区别
这篇文章主要介绍了python 动态规划(背包问题和最长公共子串),在动态规划中,你要将某个指标最大化。在这个例子中,你要找出两个单词的最长公共子串。fish和fosh都包含的最长子串是什么呢,感兴趣的朋友跟随小编一起看看吧
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008