专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

Python如何将C结构体数据保存为二进制文件

  前言
  如题所述,本文将介绍Python和C之间的数据交互问题。我们的目标是,在Python中将结构性数据保存为二进制文件,然后在C中将二进制文件数据加载到结构体,直接就可以使用,不需要再进行其他的数据转换。在Python中将结构性数据保存为二进制文件
  作为测试,这里我们使用的结构性数据,其数据结构如下:typedefstruct{inta;floatb;intarray〔10〕;array〔10〕;intmatrix〔3〕〔3〕;matrix〔3〕〔3〕;floattensor〔2〕〔3〕〔4〕;tensor〔2〕〔3〕〔4〕;}MyStruct;
  通过下面的代码,即可将上述结构性数据保存为二进制文件data。bin:importstructimportnumpyasnp定义多个嵌套的Struct实例structintfloatstruct。Struct(if)structarraystruct。Struct(10i)structmatrixstruct。Struct(9i)structtensorstruct。Struct(24f)inta123floatb3。14intarray〔1,2,3,4,5,6,7,8,9,10〕intmatrix〔〔1,2,3〕,〔4,5,6〕,〔7,8,9〕〕floattensor〔〔〔1。1,1。2,1。3,1。4〕,〔2。1,2。2,2。3,2。4〕,〔3。1,3。2,3。3,3。4〕〕,〔〔4。1,4。2,4。3,4。4〕,〔5。1,5。2,5。3,5。4〕,〔6。1,6。2,6。3,6。4〕〕〕由列表转为数组格式,方便后面进行一维展开intarraynp。array(intarray)intmatrixnp。array(intmatrix)floattensornp。array(floattensor)将结构体实例中的各字段打包为字节串多维数组需要先进行一维展开,然后才能进行打包packedabstructintfloat。pack(inta,floatb)packedarraystructarray。pack(intarray)packedmatrixstructmatrix。pack(intmatrix。flatten())packedtensorstructtensor。pack(floattensor。flatten())将各字段的字节串连接为最终的字节串packeddatapackedabpackedarraypackedmatrixpackedtensor将字节串写入二进制文件withopen(data。bin,wb)asf:f。write(packeddata)print(〔Info〕Finished)
  运行结果如下图所示:
  在Python中将二进制文件解析出来,验证数据是否正确
  上面我们将结构性数据保存为了二进制文件,那么在python中我们如何将二进制文件解析成结构性数据呢?至少我们得验证一下保存的文件是否正确。
  完整的代码如下:importstructimportnumpyasnp定义多个嵌套的Struct实例structintfloatstruct。Struct(if)structarraystruct。Struct(10i)structmatrixstruct。Struct(9i)structtensorstruct。Struct(24f)从二进制文件中读取数据withopen(data。bin,rb)asf:packeddataf。read()解包数据为元组dataabstructintfloat。unpack(packeddata〔:8〕)dataarraystructarray。unpack(packeddata〔8:48〕)datamatrixstructmatrix。unpack(packeddata〔48:84〕)datatensorstructtensor。unpack(packeddata〔84:180〕)将解包后的数据转换为结构体实例先转成array格式,方便后面的reshape操作inta,floatbdataabintarraynp。array(dataarray)intmatrixnp。array(datamatrix)floattensornp。array(datatensor)intmatrixintmatrix。reshape(3,3)floattensorfloattensor。reshape(2,3,4)print()print(finta{inta})print(floatb{:。4f}。format(floatb))print()print(intarray{}。format(intarray))print()print(intmatrix{}。format(intmatrix))print()print(floattensor{}。format(floattensor。round(4)))print()print(〔Info〕Finished)
  程序运行结果如下图所示(可以看到,数据与我们保存进去的是一致的):
  在C中读取二进制文件,直接加载到结构体
  在前言中我们提到,我们的目的就是在C中直接将Python保存的二进制数据加载到结构体进行使用,不需要再做额外的数据转换。那么,该如何做呢?请看下面的完整代码:includefstreamincludeiostreamusingnamespacestd;typedefstruct{inta;floatb;intarray〔10〕;array〔10〕;intmatrix〔3〕〔3〕;matrix〔3〕〔3〕;floattensor〔2〕〔3〕〔4〕;tensor〔2〕〔3〕〔4〕;}MyStruct;intmain(){std::stringfilepathdata。bin;打开要读取的二进制文件std::ifstreaminputfile(filepath,std::ios::binary);检查文件是否成功打开if(!inputfile。isopen()){文件打开失败std::coutopenfilepathfailed!std::endl;return1;}获取文件大小inputfile。seekg(0,std::ios::end);std::streamposfilesizeinputfile。tellg();inputfile。seekg(0,std::ios::beg);std::coutfilesizefilesizestd::endl;读取文件到缓冲区charbuffernewchar〔filesize〕;inputfile。read(buffer,filesize);关闭文件inputfile。close();将缓冲区中的数据转换为结构体MyStructmystructreinterpretcastMyStruct(buffer);输出结构体的数据std::coutstd::endl;std::coutamystructastd::endl;std::coutbmystructbstd::endl;std::coutstd::endl;std::coutarray〔;intarraylensizeof(mystructarray)sizeof(mystructarray〔0〕);for(inti0;iarraylen;i){std::coutmystructarray〔i〕,;}std::cout〕std::endl;std::coutstd::endl;std::coutmatrix〔std::endl;for(inti0;i3;i){std::cout〔;for(intj0;j3;j){std::coutmystructmatrix〔i〕〔j〕,;}std::cout〕,std::endl;}std::cout〕std::endl;std::coutstd::endl;std::couttensor〔std::endl;for(inti0;i2;i){std::cout〔;for(intj0;j3;j){std::cout〔;for(intk0;k4;k){std::coutmystructtensor〔i〕〔j〕〔k〕,;}std::cout〕,std::endl;}std::cout〕,std::endl;}std::cout〕std::endl;std::coutstd::endl;delete〔〕buffer;return0;}
  程序运行效果,如下图所示:
  可以看到,我们在C中读取二进制数据后,直接加载到结构体中,最终显示出来的正是我们预期的数据。
  至此,关于在Python中如何将C结构体数据保存为二进制文件的介绍就结束了,希望对大家能有所帮助。如果觉得不错的话,可以帮忙点个赞哦。

舒展不同的传奇大家好!最近呢出了个新活动,双蛋庆典,这个活动在每天的上去十一点到晚上的十二点结束,活动开启期间可以进入单人副本一样的场景,战力低的小伙伴不用担心会有高战的在不敢去了当然这既然是类传世元神版带元神合击版节奏快的全新版本传世。快快打宝来好久不见,甚是想念。今天小编给大家说说这款带元神合击的传奇世界群英版手游,这款游戏是三职业,微变版本,带元神的。首先是元神获取在转生等级达到2转并完成2转主线任务后可通过任务获得元数码宝贝手游,限时朱庇特兽本周到来,帝皇龙甲兽成大赢家随着本周限时预告,新的限时数码兽朱庇特兽也将在本周到来。作为雷系的又一个数码兽,朱庇特兽依旧继承了过载技能。不过,在过载的同时,又比较契合雷系,特别是契合帝皇龙甲兽。相对于其他技能国际机构发布2021年气候科学的10大新见解2021年11月4日,未来地球计划(FutureEarth)地球联盟(EarthLeague)和世界气候研究计划(WCRP)联合发布题为2021年气候科学的10个新见解(10New三国志战略版白板神将孙权!属性高,伤害足,一人撑起吴国江山白给今天不白给,大家好。都说孙权是神将,那么孙权究竟强在哪儿?以至于都觉得太过离谱,孙权,有各种变种形态就不细分了这里给大家简单的说一说阵容配置和他的思路。这套阵容孙权其自带战法坐落后就要挨打,快来建设属于你自己的王国吧除了在作战系统上下功夫外,重返帝国还设计了一套独具特色的城市建设方法。建造时,玩家可以自由确定建筑物的位置,并随时更改建筑物的布局。此外,随着一些特殊建筑的成功建造,相应的新玩法也雄霸武神群雄争霸任务怎么做雄霸武神群雄争霸任务有什么奖励大家好,今天小编为大家带来的是雄霸武神手游中苍月岛地图内的群雄争霸任务的相关介绍,对这个任务还不是很清楚的小伙伴可以跟着小编一起来看看哟!群雄争霸参与条件等级限制2转90级以上群雄隔十年,再看一遍国配版的入殓师隔十年,再看一遍国配版的入殓师,配的很好,感觉比原声的还有感觉通篇讲死亡的电影也处处透着生的希望,,没多少心灵鸡汤和大道理,平平淡淡,举重若轻日本人和中国人的生死观真是大不同,国人使用红米手机的你,恭喜你中奖了国货之光第一款产品横空出世一年的努力,小米公司于2013年7月31日发布了第一款红米系列手机红米1。产品一经发布,受到了消费者的喜爱,在手机市场刮起了一阵飓风。90秒抢空10万台,得到认可!Corejj发文今年德杯最大收获就是看到了hang最近德杯已经结束了,TES笑到了最后,阿水更是拿下了德杯三冠,在德杯这个赛事中算是比较硬气的一个荣誉了。纵观这一次的德杯表现,相信很多人都对新赛季报以期待,毕竟这一次不少战队都展现我的电子管收音机的一点情怀太喜欢这么漂亮的电子管收音机,只可惜不是我的。2000年我毕业后,没参加工作,没学过电子电器,但对电子电器很热爱,就是没有机会学习。一次堂哥送给我一台电子管收音机,成色还不错,在家全红婵哥哥带爷爷玩自拍!爷爷看手机镜头满脸好奇,哥哥该减肥了在今年的东京奥运会上,全红婵表现的非常出色,她在女子跳水十米台的比赛中,以三跳满分,并且总分打破世界纪录的成绩获得了冠军。东京奥运会是全红婵参加的第一届奥运会,她以14岁的年龄就获老风尘的玩儿日记(壹贰壹)一王国纪元首充玫瑰骑士2022年1月5日星期三北京晴这两天王国纪元玩的有点上头,但是电脑端确实不大方便,上班或者休息的时候还好,要是出去的话,就不能及时更新采集或者建筑升级了,这几天随着等级的提升,随便从3499元跌至跌至1087元,骁龙8555000mAh大电池IMX586我们查看了当前市面上在9001100元价位段的手机,很多品牌厂商都推出了这个价位段的手机,包括vivoiQOOU3xRedmiNote94G荣耀Play5TRedmiNote10荣横竖屏任意切换的即时战略你玩过吗重返帝国不只是在游戏设计有独到之处,它的UI涉及一样别出心裁。玩家在建设设施和开展城市建设时,可以控制城市建设的建设位置。即使在建设完成后,他们也可以随时改变位置,随时改变布局,让万国觉醒丨谁可挡吾称王,又是谁敢言不败失落之地头条快报征服赛季C11033服,7522大军压境,兵锋直指5968腹地冲天战意下,一往无前如鹰击长空般重创敌军,还是兵行受阻再图南下而2879兵不血刃占领多片领土,烈焰阵营传奇3怀旧,三职业手游1。45版,神装随处可见传奇3还有多少人记得这个版本,端游的经典无人不知,手游(手机)做得如何呢?原汁原味,百分百的还原游戏设定,更多的是职业自由,三个职业相互克制,平等,可以通过提升自己的等级去获得更好最终幻想7重制版新MOD蒂法腹肌获得加强因为技术原因,尽管PC版最终幻想7重制版已经发售一段时间了,可是部分玩家喜闻乐见的清凉MOD并没有出现,目前围绕这款游戏展开的MOD更多的是性能上的补充,或者是人物更换服装颜色等,原神2。3活动开启,入坑组阵容要注意,刻晴卢姥爷就别再养了今天我们也是迎来了2。3版本的活动开启,同时在直播活动中都通过兑换码换到了奖励,虽然还是一如既往地抠。不过好消息是,每次伴随着新版本活动开启,都有很多入坑或者回坑的玩家们加入。对于金铲铲之战S6版本第一阵容!飞雷神阿卡丽Hello,大家好!我是兔子,鸽了2天运营阵容了,久违了呀大家,今天为大家分享一下版本T0运营阵容飞雷神阿卡丽!目前版本环境来说,这套阵容基本成型是没有天敌的,无论打赌狗阵容还是高下午2点,国乒28岁悍将宣布离队,刘国梁伤心,马龙情绪复杂国乒现在已经进入到备战状态,刚刚结束的2021年国乒完美地完成了各项任务,奥运会世乒赛等大赛上我们均取得了非常亮眼的数据,展现了国乒强大的统治地位!但我们也发现,国乒的竞争对手们成保护心脑血管,预防冠心病。一味丹参饮,功同四物汤中医有一句话说的是,一味丹参饮,功同四物汤。什么意思呢?就是一味丹参的功效就同时具备了四物汤养血活血的功效。活血作用是丹参最为突出的一个特点,现代药理研究显示,丹参有扩张冠状动脉的
赵睿让出顶薪,首钢看好王晗,周琦直播爆料,上海火速补强当2亿人民币放在你面前,你会有什么感觉?易建联当初面对某南方土豪球队赤裸裸的金钱诱惑时,只留下了一句话,他离开广东队就是他退役的时候,而在刚刚过去的这个赛季中,广东队当家后卫赵睿也戚薇用抱枕遮肚子,半年没有染头发,孕肚意外曝光疑似已5个月关心娱乐圈的朋友们都知道,在李承铉和戚薇结婚之后,他就成为了戚薇背后的男人,更是萌宝Lucky的奶爸。随后他开始逐渐退出了娱乐圈,将自己的时间全部给了家庭。有媒体拍到李承铉陪同戚薇工作日记宝贝脾胃虚弱,能经常炖点山楂苹果水喝来预防积食吗?今天上午在楼下遛娃的时候,我的客户给我发来语音信息,意思是她家儿子是因脾胃虚弱来调理的,现在基本恢复到同年龄正常水平,但宝妈已经开始担心将来没有我给设计食谱和调理方案,宝贝的脾胃会神草传奇星哥养发百问百答之六头发毛糙如何护理前段时间我的头发真的是干枯毛躁,梳个头发打结,我只是改变了一下我洗头的顺序,就可以让你的发质变好变顺,而且呢,不容易掉发,第一步呢,就是在你洗头之前干发的时候来抹护发素,不要舍不得新生儿要不要剃满月头?有些宝宝剃了满月头,头发再也没长过给宝宝剃满月头,婆婆坚持,医生反对,宝妈应该听谁的咱们国家有个习俗,宝宝出生满月后是要剃满月头的,说是剃了满月头,孩子的头发就会长得乌黑亮丽。单位的小王前段时间生了一对双胞胎,这不血管外科刁永鹏想要活血化瘀不知道该怎么办?丹参和山楂来帮忙血管的堵塞,从中医学的角度来说绝大部分是瘀血造成的,这样的话就需要活血和化瘀,让血液流动起来。中医药里有很多不错的药方和药材,对治疗血管堵塞有着不错的实际效果。比如被誉为纯天然支架打扮成熟接受采访,特鲁索娃我害怕核酸检测,主动提起羽生结弦特鲁索娃是俄罗斯花样滑冰队在今年冬奥会上出现的一位超级明星,特鲁索娃在赛场上跳出了五个四周跳。大家都知道,四周跳的难度系数是非常高的,很多男选手都不敢保证自己能够很好地完成四周跳,90岁杨少华还在搞钱?做核酸需医护上门,走路颤巍出席活动引争议近日,相声表演艺术家杨少华,被拍到出席天津市某餐饮开幕仪式。90岁的他,一现身全程都被人搀扶架着走。走路颤颤巍巍的他,光走那条短暂的红地毯,都用了很久的时间。当镜头近距离拍摄张少华五一小长假今日收官,亲子乐成平湖公园游玩主题五一小长假今日收官,亲子乐成平湖公园游玩主题(通讯员何社成)5月4日是五一小长假最后一天,市内各大公园节日气氛仍然不减。上午9时,笔者在平湖公园看到游人倍增,吊索桥上湖边凉亭,水边几位女子在公园野餐,一位大爷前去围观,网友大爷等着捡瓶子呢春天的时候,约上三五好友,去公园野餐,踏青,不仅能欣赏美丽的景色,还能联络彼此之间的感情。有些漂亮女孩更是抓住和朋友一起玩的机会,带上好看的道具,好吃的食物,穿上漂亮的小裙子,为的不起眼的公园首次遇见黄栌花远看今年春天在北京最惬意,因为入驻头条,关注了北京旅游官网号,每天都能看到北京美景介绍,也关注欣赏了许多个体头条的美文美图,于是今春在北京走进了几个胡同,到了多个公园景点,看到了在
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网