更新时间:2023-09-19 22:21:26
你们好,最近小艾特发现有诸多的小伙伴们对于struct结构体,struct这个问题都颇为感兴趣的,今天小活为大家梳理了下,一起往下看看吧。
1、 启动空闲程序(必须安装Python 3),点击界面菜单“文件新建文件”,新建一个空白Python源代码文件。
2、 然后保存为“study_struct_module.py”文件;
3、 Python 3中的struct模块提供了一系列打包和解包函数以及一个名为Struct的类。两种方法在功能上没有区别,可以根据代码环境自由选择。
4、 使用struct.pack函数,可以将数据按照指定的格式打包成字节流(请参考Python 3帮助手册,搜索“struct”)。并通过struct.unpack函数,
5、 您可以将字节流中的数据还原为指定格式的Python数据;
6、 明确struct模块的封装和拆包用法之后,接下来,你可以通过代码体验它们的具体用法。在源代码文件“study_struct_module.py”中,
7、 导入struct模块,然后在try…except中添加打包Python数据的代码(struct模块执行错误会抛出struct.error exception)输出打包后的数据。
8、 编写完代码后,单击F5运行程序。一切正常时,可以在Shell窗口看到输出结果;
9、 继续将解包后的字节流添加到try…除了源代码,输出解包后的数据代码,然后点击F5运行。当一切正常时,您可以在Shell窗口中看到,解包后的数据与原始传入数据相同,只是0.1535,
10、 这其实是浮点数的误差,是正常现象;
11、 Python的struct模块还提供了Struct类,它也可以通过其pack和unpack方法打包和解包二进制数据。调用时需要注意传入的参数类型,不要和同名函数混淆。
12、 它可以是一个结构对象;
13、 将通过Struct类对象打包和解包数据的代码添加到除源代码之外的try…中,然后按F5运行。通过检查Shell窗口中打印的数据,可以确定结果与struct函数的输出一致;
14、 struct模块提供了struct.pack_into和struct.unpack_from函数,用于将数据打包到一个缓冲区中(例如一个数组对象)。
15、 以及从缓冲器中解包数据。在使用pack_into函数时,需要提供一个可写的缓冲区,这个缓冲区可以通过数组模块中提供的数组函数来创建。创建数组对象时,可以传入一个派生列表来设置数组的长度。
16、 继续将“将数据打包到缓冲区”的测试代码添加到源代码文件的try…except块中。编写完代码后,单击F5运行。在Shell窗口中,您可以看到打包数据的输出结果。当直接打印阵列时,
17、 它将以数组的存储格式输出数据。转换成二进制后,输出结果与之前一致;
18、 继续将“从缓冲区解包数据”的测试代码添加到源代码文件的try…except块中,然后按F5运行。在Shell窗口中,可以看到解码后的数据与之前的输出一致;
19、 struct模块还提供了一个函数iter_unpack,它以固定的格式遍历解压缩后的字节流。主要用于for.循环解码固定格式的字节流中的所有数据;
20、 继续向源代码文件的try…except块追加代码“遍历字符格式的解包字节流”,然后按F5运行。代码运行后,您可以在Shell窗口中看到所有打印的字节数据。
21、 由于struct.iter_unpack返回一个迭代器,所以输出的数据格式都是迭代器的格式;
22、 至此,Python中struct模块的基本用法就介绍完毕了,下一篇文章中,我会向大家介绍一下在Python中通过二进制文件与C++代码进行交互的方法。敬请期待!Enjoy!~
以上就是struct这篇文章的一些介绍,希望对大家有所帮助。