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

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结构体数据保存为二进制文件的介绍就结束了,希望对大家能有所帮助。如果觉得不错的话,可以帮忙点个赞哦。

站在南京楼市顶层的湾四,竟现5。7万房源?站在南京楼市顶层的湾四,居然也跌破底价了?近日,阿里法拍网站上出现了一套来自仁恒江湾天成四期(湾四)的法拍房。值得注意的是,这套房源市场价约1448万,折合单价约8。2万,然而起拍急,二次感染高峰仿佛消失了?老年人群体尚不可放松警惕!最近,大妈在思考一个严肃的话题第二波疫情还会来吗?大家伙都知道,全面放开的日子里,小阳人们都陆续阳康了,进入决赛圈的无感人群也宣告了最终的胜利,出门再也不用携带核酸行程码口罩三件套每日一个法律小常识(4)民法典第1129条规定丧偶儿媳对公婆,丧偶女婿对岳父母,尽了主要赡养义务的,作为第一顺序继承人。赡养义务主要是指对老年人经济上予以供养生活上予以照顾精神上予以慰藉。丧偶儿媳丧偶女婿2023年甘肃省气象局事业单位招聘公告招聘甘肃省气象局2023年事业单位公开招聘应届高校毕业生公告(第二阶段)根据气象部门事业单位公开招聘应届高校毕业生管理办法和甘肃省气象部门事业单位公开招聘应届高校毕业生实施细则的要绥棱小伙高明走全国近百村邀请2万老人吃饭!生活报联合阿里公益天天正能量奖一万元2月9日,绥化市绥棱县小伙高明的抖音号小北京在路上更新了最新动态,大家好,我是小北京,现在凌晨4点,我要从黑龙江出发,去广西南宁,给山里的老人去做饭。视频里的高明精神抖擞,笑容一直抗美援朝最大叛徒谷中蛟,害死6700多名战友,最后下场如何?1952年10月,志愿军第38军对朝鲜铁原西北部的白马山高地实施强攻。作为曾经在解放战争朝鲜战争里多次立下重大战功的王牌万岁军,战前几乎所有人都认为38军必然可以轻取目标高地。然而华为Mate50降价了,可网友已经没兴趣了最近有网友说华为Mate50系列降价了,其中部分版本降价幅度高达1000多元,然后就去官网看了看,好像并没有这种好事,后面问了下,原来是知名的某少少平台,对此只能说按照一些人的标准第三代半导体域下一个九安医疗,取代汉王和中航电测洗盘结束,机会来了。昨天市场出现大跳水,A股迎来新一轮洗牌,谁会接替人工智能成为下一波最强主线呢?接下来的行情大家不用猜了,因为我带着标准答案来了股市,想要站的稳,出手就要快准狠。北京一卡通学生卡只能线下充值?用这类手机已能贴卡充值开学后,不少家长都要为孩子的学生卡进行充值。不过,一些家长提出疑问,学生卡是不是只能到线下网点进行充值?今日,记者咨询了北京市政交通一卡通有限公司,工作人员表示,目前除了公交地铁和比特币每周每月收盘都面临生死攸关的局面,宏观牛市趋势岌岌可危比特币月度RSI提供了一个希望之窗,因为BTC多头在2月同时与多条长期阻力趋势线作斗争。比特币(BTC)让交易员猜测,因为牛市的未来取决于2月的最后一周。在2月17日的多条推文中,骁龙8Gen3或10月底正式发布,首款搭载机型或11月发布高通在2022年共推出了三款旗舰处理器骁龙8Gen1处理器骁龙8处理器骁龙8Gen2处理器。骁龙8Gen2处理器发布于去年11月16日,该处理器的最高频率为3。2GHz,但该芯片在
车轮滚滚尘土飞扬!普宁南溪上演速度与激情视频加载中(2023年普宁狼队第十二届年会越野挑战赛,时长共3分24秒)2023年普宁狼队第十二届年会越野挑战赛1月6日至7日,在揭阳普宁市南溪体育公园,一场热血澎湃的越野盛事正式时报观察丨跳出猪价波动周期率点蓝字关注,不迷路国家发改委近日发布预警,猪粮比价已进入过度下跌三级预警区间。而3个多月前,36个大中城市精瘦肉零售价格周均价变动幅度还处于过度上涨二级预警区间。猪价从过度上涨到过搜狐张朝阳携新书做客东方甄选教育应让人保持兴趣日前,搜狐公司董事局主席兼CEO张朝阳携首部著作张朝阳的物理课做客东方甄选,与主播董宇辉明明畅谈新书创作经历开授物理课初衷,同网友分享了费曼学习法如何对抗焦虑等涉及教育心理价值观的北约与欧盟签署合作宣言应对共同威胁来源新华网北约和欧盟10日签署合作联合宣言,旨在加强欧洲集体防御,应对共同的安全威胁。当天上午,北约秘书长斯托尔滕贝格欧洲理事会主席米歇尔和欧盟委员会主席冯德莱恩在北约总部共同出席法媒空客2022年订单与交付数量超过波音据法新社巴黎1月10日报道,面对波音,空客正巩固其民用航空领域世界第一的地位比起处于康复期但遭遇供应商难以跟上其增长速度问题的美国竞争对手波音,欧洲飞机制造商空客在2022年交付了关于感情从前的打扰,扰到极点之后便不会了,不再打扰了,风,没吹过,雨,没来过,我,没爱过。所以喜欢一个人这件事,终究就是一个漫长的笑话什么东西都是攒出来的,好感是,失望也是。付出给一个人真男人现在生活中的10条定律头条创作挑战赛1随着自身素质越来越高,身边的朋友会越来越少。2能够拥有的钱越多,反而负担会感觉越重。3爱的越深,激情过后感觉越是累。4当你饭量越来越少时,健康反而变得健康了。5越是一个女人动了情,往往是控制不住自己的,很真实文充满元气的芳胖胖编辑充满元气的芳胖胖在男女相处中,情感是最难说清楚的事情。很多人,就连自己是否喜欢对方都不敢确定,更何况是对方是否喜欢自己呢?多数情况下,往往是彼此都不确定,都不新的一年,请以这三种心态来爱自己!白驹过隙,似水流年。无论曾经有多少美好,多少遗憾,都成为了过去。无论未来多么遥远,多么艰辛,都需要我们勇敢面对。凡为过往,皆为序章。新的一年,一切都是新的开始。新的一年,愿你活出自越南最脏温泉,允许男女混浴,生意好到经常爆满越南推出了史上最脏的温泉浴,当地允许男女一起混浴,现在很多游客会来这里玩耍,都会体验一下当地这种特色的项目!(此处已添加小程序,请到今日头条客户端查看)而最脏的温泉,就是当地有名的冬季女人阳虚怕冷,手脚冰凉,7个症状表现很明显,记得调理寒邪入体,后患无穷。阳虚之人要谨防寒邪。黄帝内经中提到过冬伤于寒,春必病温。如果冬季不注意保暖,被寒气损伤,那么病邪潜伏在体内,等来年春天,天气转暖。则容易被各种引起发烧的传染病所
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网