System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种c语言结构体与json相互转换的方法及装置制造方法及图纸_技高网

一种c语言结构体与json相互转换的方法及装置制造方法及图纸

技术编号:40960933 阅读:29 留言:0更新日期:2024-04-18 20:39
一种c语言结构体与json相互转换的方法及装置,涉及数据交换技术领域,包括:基于标准c语言头文件,通过编译生成c语言结构体的结构体描述信息;调用将c语言结构体转换成json的第一函数,基于结构体描述信息,遍历结构体成员描述信息对象中的每个成员;判断成员是否为数组,对于数组数量大于1的成员,基于成员名称创建json数组对象,将json数组对象加入json根对象,并按照数组大小遍历json数组成员:基于结构体描述信息,判断数据结构类型是否为结构体类型,根据当前成员是否为数组,以将创建的json对象加入json数组对象或json根对象,并确定json对象的值或传入对应的参数。本申请中的转换方法工作量少,且能够运行在MCU、DSP等无操作系统或者资源受限系统上。

【技术实现步骤摘要】

本申请涉及数据交换,具体涉及一种c语言结构体与json相互转换的方法及装置


技术介绍

1、目前实现c语言结构体与json相互转换方式主要有三种,方式一是手动实现的方式,即由程序员手动编写程序,逐个遍历结构体每个成员,将每个成员转换成json;方式二是调用类似cson这种第三方库,cson通过引入额外的结构体描述信息,可实现结构体直接转成json;方式三是调用xpack这种c++库实现,需要在原有结构体中增加一点额外的标记信息,可实现结构体直接转成json。

2、对于方式一而言,其需要人工进行大量的转换编码工作,工作量很大,自动化程度不高,而且其需要根据不同结构化对象进行定制编码,不具有通用性。此外,一旦数据结构发生变化,需要人工重新进行转换代码修改,维护十分不方便。方式二也需要手动增加结构体成员的描述信息,工作量也较大。方式三是c++实现方式,在类似mcu(micro controlunit,微控制单元)及dsp(digital signal processor,数字信号处理器)这些无操作系统或者资源受限系统中无法运行。

3、因此,目前缺少一种工作量少,且能够运行在mcu、dsp等无操作系统或者资源受限系统上的c语言结构体与json相互转换方法。


技术实现思路

1、本申请提供一种c语言结构体与json相互转换的方法及装置,其相互转换时的工作量小,且能够运行在mcu、dsp等无操作系统或者资源受限系统上。

2、第一方面,本申请实施例提供一种c语言结构体转换成json的方法,所述c语言结构体转换成json的方法包括:

3、基于标准c语言头文件,通过编译生成c语言结构体的结构体描述信息,所述结构体描述信息包括结构体列表信息和结构体成员描述信息,所述结构体列表信息包括结构体名称、成员数量和结构体成员描述信息对象,所述结构体成员描述信息包括成员名称、数据结构类型、类型名称、数组数量、类型大小和偏移地址;

4、调用将c语言结构体转换成json的第一函数,输入参数包括结构体变量对应的内存地址、结构体名称和json根对象,基于所述结构体描述信息,遍历结构体成员描述信息对象中的每个成员,并根据成员的偏移地址计算对应的内存地址;

5、判断成员是否为数组,对于数组数量大于1的成员,基于成员名称创建json数组对象,将json数组对象加入json根对象,并按照数组大小遍历json数组成员:

6、基于所述结构体描述信息,判断数据结构类型是否为结构体类型,根据当前成员是否为数组,以将创建的json对象加入所述json数组对象或json根对象,并确定json对象的值或传入对应的参数。

7、结合第一方面,在一种实施方式中,所述基于所述结构体描述信息,判断数据结构类型是否为结构体类型,根据当前成员是否为数组,以将创建的json对象加入所述json数组对象或json根对象,并确定json对象的值或传入对应的参数,包括:

8、若为非结构体类型,根据数据结构类型创建相应的名称为成员名称的json对象;

9、按照数据结构类型及类型大小从对应的内存地址中取得成员的值,将获取的值设为该json对象的值;

10、若当前成员为数组成员,则将该json对象加入json数组对象,否则将该json对象加入json根对象。

11、结合第一方面,在一种实施方式中,所述基于所述结构体描述信息,判断数据结构类型是否为结构体类型,根据当前成员是否为数组,以将创建的json对象加入所述json数组对象或json根对象,并确定json对象的值或传入对应的参数,包括:

12、若为结构体类型,创建一个相应的名称为成员名称的json对象,若当前成员为数组成员,则将该json对象加入json数组对象,否则将该json对象加入json根对象;

13、递归调用第一函数,并传入当前成员的偏移地址、当前结构体名称和创建的json对象。

14、结合第一方面,在一种实施方式中,所述数据结构类型包括有符号整型、无符号整型、浮点型、字符串和结构体。

15、第二方面,本申请实施例提供了一种c语言结构体转换成json的装置,所述c语言结构体转换成json的装置包括:

16、编译模块,其基于标准c语言头文件,通过编译生成c语言结构体的结构体描述信息,所述结构体描述信息包括结构体列表信息和结构体成员描述信息,所述结构体列表信息包括结构体名称、成员数量和结构体成员描述信息对象,所述结构体成员描述信息包括成员名称、数据结构类型、类型名称、数组数量、类型大小和偏移地址;

17、第一转换模块,其用于调用将c语言结构体转换成json的第一函数,输入参数包括结构体变量对应的内存地址、结构体名称和json根对象,基于所述结构体描述信息,遍历结构体成员描述信息对象中的每个成员,并根据成员的偏移地址计算对应的内存地址;

18、并判断成员是否为数组,对于数组数量大于1的成员,基于成员名称创建json数组对象,将json数组对象加入json根对象,并按照数组大小遍历json数组成员:

19、所述第一转换模块还基于所述结构体描述信息,判断数据结构类型是否为结构体类型,根据当前成员是否为数组,以将创建的json对象加入所述json数组对象或json根对象,并确定json对象的值或传入对应的参数。

20、第三方面,本申请实施例提供了一种json转换成c语言结构体的方法,所述json转换成c语言结构体的方法包括:

21、基于标准c语言头文件,通过编译生成c语言结构体的结构体描述信息,所述结构体描述信息包括结构体列表信息和结构体成员描述信息,所述结构体列表信息包括结构体名称、成员数量和结构体成员描述信息对象,所述结构体成员描述信息包括成员名称、数据结构类型、类型名称、数组数量、类型大小和偏移地址;

22、调用将json转换成c语言结构体的第二函数,输入参数包括结构体变量对应的内存地址、结构体名称和json根对象,基于所述结构体描述信息,遍历结构体成员描述信息对象中的每个成员,并根据成员的偏移地址计算对应的内存地址;

23、根据成员名称寻找对应的json对象,直至遍历所有成员,其中,还判断成员是否为数组,对于数组数量大于1的成员,将json对象解析为json数组对象,再按照数组大小遍历json数组成员;

24、基于所述结构体描述信息,判断数据结构类型是否为结构体类型,以将从json对象中取得对应的值写入对应的内存地址,或传入当前成员的偏移地址、当前结构体名称和当前json对象。

25、结合第三方面,在一种实施方式中,所述基于所述结构体描述信息,判断数据结构类型是否为结构体类型,以将从json对象中取得对应的值写入对应的内存地址,或传入当前成员的偏移地址、当前结构体名称和当前json对象,包括:

26、若为非结构体类型,按照本文档来自技高网...

【技术保护点】

1.一种c语言结构体转换成json的方法,其特征在于,所述c语言结构体转换成json的方法包括:

2.如权利要求1所述的c语言结构体转换成json的方法,其特征在于,所述基于所述结构体描述信息,判断数据结构类型是否为结构体类型,根据当前成员是否为数组,以将创建的json对象加入所述json数组对象或json根对象,并确定json对象的值或传入对应的参数,包括:

3.如权利要求1或2所述的c语言结构体转换成json的方法,其特征在于,所述基于所述结构体描述信息,判断数据结构类型是否为结构体类型,根据当前成员是否为数组,以将创建的json对象加入所述json数组对象或json根对象,并确定json对象的值或传入对应的参数,包括:

4.如权利要求1所述的c语言结构体转换成json的方法,其特征在于:

5.一种c语言结构体转换成json的装置,其特征在于,所述c语言结构体转换成json的装置包括:

6.一种json转换成c语言结构体的方法,其特征在于,所述json转换成c语言结构体的方法包括:

7.如权利要求6所述的json转换成c语言结构体的方法,其特征在于,所述基于所述结构体描述信息,判断数据结构类型是否为结构体类型,以将从json对象中取得对应的值写入对应的内存地址,或传入当前成员的偏移地址、当前结构体名称和当前json对象,包括:

8.如权利要求6或7所述的json转换成c语言结构体的方法,其特征在于,所述基于所述结构体描述信息,判断数据结构类型是否为结构体类型,以将从json对象中取得对应的值写入对应的内存地址,或传入当前成员的偏移地址、当前结构体名称和当前json对象,包括:

9.如权利要求6所述的json转换成c语言结构体的方法,其特征在于:

10.一种json转换成c语言结构体的装置,其特征在于,所述json转换成c语言结构体的装置包括:

...

【技术特征摘要】

1.一种c语言结构体转换成json的方法,其特征在于,所述c语言结构体转换成json的方法包括:

2.如权利要求1所述的c语言结构体转换成json的方法,其特征在于,所述基于所述结构体描述信息,判断数据结构类型是否为结构体类型,根据当前成员是否为数组,以将创建的json对象加入所述json数组对象或json根对象,并确定json对象的值或传入对应的参数,包括:

3.如权利要求1或2所述的c语言结构体转换成json的方法,其特征在于,所述基于所述结构体描述信息,判断数据结构类型是否为结构体类型,根据当前成员是否为数组,以将创建的json对象加入所述json数组对象或json根对象,并确定json对象的值或传入对应的参数,包括:

4.如权利要求1所述的c语言结构体转换成json的方法,其特征在于:

5.一种c语言结构体转换成json的装置,其特征在于,所述c语言结构体转换成json的装...

【专利技术属性】
技术研发人员:黄立邓文辉刘蒙
申请(专利权)人:武汉高德红外股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1