CN104834508A - 一种生成用于读写二进制文件代码的方法 - Google Patents
一种生成用于读写二进制文件代码的方法 Download PDFInfo
- Publication number
- CN104834508A CN104834508A CN201410047843.7A CN201410047843A CN104834508A CN 104834508 A CN104834508 A CN 104834508A CN 201410047843 A CN201410047843 A CN 201410047843A CN 104834508 A CN104834508 A CN 104834508A
- Authority
- CN
- China
- Prior art keywords
- file
- format
- variable
- zfs
- compound type
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Abstract
本发明提供了一种生成用于读写二进制格式文件代码的方法,其步骤如下:首先,使用GUI工具定义二进制文件格式,所定义的文件格式保存为格式描述文件ZFS;然后,编译该格式描述文件,生成读写该格式的文件的代码;生成检查该格式的文件的工具;生成Dump该格式的文件的工具;生成一套专用于嵌入式系统的函数库代码。采用该方法生成的用于写文件的代码中,自动完成一些记录数量、偏移量、Size等的计算与回写,极大的简化了开发。同时生成的格式检查工具与Dump工具等,便于验证为写出文件的正确性。本发明所定义的文件格式描述的标准,可用于定义任意二进制文件格式;采用XML扩展形式,便于维护和理解;同时提供的GUI编辑器,便于文件格式定义。
Description
技术领域
本发明涉及软件开发领域,具体而言,涉及一种生成读写文件二进制代码的方法。
背景技术
在某些行业的软件开发中,需要读写各种格式的二进制数据文件,目前大多采用程序员编写读写的代码。即需要根据文件的格式,定义相应的数据结构,编写相应的读写的代码;为了查看与验证输入/输出文件的格式的正确性,通常还需要编写将二进制文件转换为文本形式的Dump工具,以及格式检查工具。工作繁琐且易出错。
发明内容
为了解决上述存在的技术问题,本发明提供一种生成用于读写二进制文件代码的方法,用以提高软件开发的效率。
本发明的目的是通过下述技术方案实现的:一种生成用于读写二进制文件代码的方法,其特征在于,步骤如下:首先,使用GUI工具定义二进制文件格式,所定义的文件格式保存为格式描述文件ZFS(ZFormat Standard);然后,编译该格式描述文件,生成读写该格式的文件的代码;生成检查该格式的文件的工具;生成Dump该格式的文件的工具;生成一套专用于嵌入式系统的函数库代码;
所述的格式描述文件ZFS整体的属性包括记录格式的名称、标题、字节序、是否以Bit流存储、代表文件整体的复合类型、Schema文件的相对路径;
所述的格式描述文件ZFS的文件格式包含一个或多个复合类型的定义及其回写信息;每个复合类型中可以包含一个或多个变量;变量的类型可以是基本类型或复合类型;
所述的格式描述文件ZFS中可指定字节序,即文件中保存的数值的字节序与内存中相同或不同;
所述的格式描述文件ZFS可以嵌套包含,被包含的ZFS中的复合类型可以在包含它的ZFS文件中使用。
所述的变量的类型可以是基本类型或复合类型;其中基本类型至少包括1字节~8字节的整数、单字节与宽字节字符串、2~8字节浮点数、任意Bit的数字,且根据需要可对代码生成工具进行扩展;
变量是否保存在文件中,可在格式描述文件ZFS中通过表达式动态指定;该表达式可以被生成相应的代码;
所述的复合类型变量由多个变量组合而成,复合类型变量可定义传入的参数;参数的类型可以是基本类型,也可以是复合类型;
所述的复合类型变量可被定义为联合体,在输出至二进制文件时复合类型中的多个变量占用同一存储空间且只有一个为有效;
所述的复合类型可定义回写信息,所述的回写信息包括记录的数量、在文件中的偏移、保存的Size。
所述的变量是一个数组,数组长度可以通过表达式动态指定。
所述的变量之间存在对齐标识,使变量的起始位置按照整数字节数对齐存储。
所述的变量与变量之间存在忽略区间,使变量之间加入空白区域。
除复合类型中的变量外,还可定义临时变量用于读写过程中的计算。
将所述的格式描述文件ZFS保存为基于XML的扩展格式。
本发明的有益效果:本发明采用上述方案,生成的用于写文件的代码能够自动完成一些记录数量、偏移量、Size等的计算与回写,极大的简化了开发。同时生成的格式检查工具与Dump工具等,便于验证为写出文件的正确性。本发明所定义的文件格式描述的标准,可用于定义任意二进制文件格式;采用XML扩展形式,便于维护和理解;同时提供的GUI编辑器,便于文件格式定义。
附图说明
图1是本发明方法文件转换流程图。
图2是本发明方案依据的二进制树形结构原理图。
图3是本发明变量记录格式的范例图。
具体实施方式
本发明提供了一种生成用于读写二进制格式文件的代码的方法,该方法基于一个文件格式编辑模块及代码生成模块,如图1所示,其中文字格式编辑模块:采用GUI编辑器,用户可任意定义需要读写的二进制文件的格式,所定义的格式保存为格式描述文件ZFS(Z FormatStandard)。代码生成模块:根据用户定义的文件格式,自动生成用于读写该格式的文件的代码。
本发明方案的理论依据:通常我们认为一个二进制文件的格式是一个树形的结构,图2所示,其中C中存在一个变量“Offset_of_F”,为指向“F”开始处的地址,则我们认为C与F存在“关系”<relationship>。本发明中生成的代码,可以自动计算这种关系并回写,从而简化开发。
本发明提供的一种生成用于读写二进制文件代码的方法,步骤如下:首先,使用GUI工具定义二进制文件格式,所定义的文件格式保存为格式描述文件ZFS(Z Format Standard)或者直接按照ZFS(Z FormatStandard)标准编写格式描述文件;然后,编译该格式描述文件,生成读写该格式的文件的代码;生成检查该格式的文件的工具;生成Dump该格式的文件的工具;生成一套专用于嵌入式系统的函数库代码;
其中格式描述文件ZFS整体的属性包括记录格式的名称、标题、字节序(BigEndian/LittleEndian)、是否以Bit流存储、代表文件整体的复合类型、Schema文件的相对路径;
格式描述文件ZFS的文件格式包含一个或多个复合类型的定义及其回写信息;每个复合类型中可以包含一个或多个变量;变量的类型可以是基本类型或复合类型;
格式描述文件ZFS中还可指定字节序,即文件中保存的数值的字节序与内存中相同或不同;
格式描述文件ZFS可以嵌套包含,被包含的ZFS中的复合类型可以在包含它的ZFS文件中使用。
其中变量的类型可以是基本类型或复合类型;其中基本类型至少包括1字节~8字节的整数、单字节与宽字节字符串、2~8字节浮点数、任意Bit的数字,且根据需要可对代码生成工具进行扩展;
变量是否保存在文件中,可在格式描述文件ZFS中通过表达式动态指定;该表达式可以被生成相应的代码;
所述的复合类型变量由多个变量组合而成,复合类型变量可定义传入的参数;参数的类型可以是基本类型,也可以是复合类型;
所述的复合类型变量可被定义为联合体,在输出至二进制文件时复合类型中的多个变量占用同一存储空间且只有一个为有效;在输出二进制文件时,可自动计算并回写相应的信息。如图3所述格式:“记录总Size”中保存其后的记录的在文件中存储所占空间的大小。在ZFS中对此进行描述,则在使用生成的代码输出文件时,可自动计算并将正确的“记录总Size”的值写出至文件。
所述的变量可以是一个数组,数组长度可以通过表达式动态指定。变量之间可以存在对齐标识,使变量的起始位置按照整数字节数对齐存储。变量与变量之间可以存在忽略区间,使变量之间加入空白区域。除复合类型中的变量外,还可定义临时变量用于读写过程中的计算。其中复合类型可定义回写信息,即变量与变量之间的关系。如:记录的数量、在文件中的偏移、保存的Size等。
格式描述文件ZFS也可以保存为基于XML的扩展格式。
下面结合具体实施应用对本发明做进一步的详细说明。假设有如下文件格式:
整个文件-DataFrame
文件头-FileHeader
·数据项:记录的个数
记录的排列-DataRecList
记录#1-DataRec
·数据项1
·数据项2
记录#2-DataRec
·数据项1
·数据项2
……
记录#n-DataRec
·数据项1
·数据项2
使用本发明提供的GUI工具定义格式。或按照ZFS格式标准编写格式定义。
生成的代码如下:
使用生成的代码时,使用者可调用上述任一函数,一次性或部分的输出所定义格式的文件。
之后,使用者可使用生成的格式检查工具对输出的文件进行检查。使用Dump工具查看输出的文件的内容。
Claims (7)
1.一种生成用于读写二进制文件代码的方法,其特征在于,步骤如下:首先,使用GUI工具定义二进制文件格式,所定义的文件格式保存为格式描述文件ZFS(Z Format Standard) ;然后,编译该格式描述文件,生成读写该格式的文件的代码;生成检查该格式的文件的工具;生成Dump该格式的文件的工具;生成一套专用于嵌入式系统的函数库代码;
所述的格式描述文件ZFS整体的属性包括记录格式的名称、标题、字节序、是否以Bit流存储、代表文件整体的复合类型、Schema文件的相对路径;
所述的格式描述文件ZFS的文件格式包含一个或多个复合类型的定义及其回写信息;每个复合类型中可以包含一个或多个变量;变量的类型可以是基本类型或复合类型;
所述的格式描述文件ZFS中可指定字节序,即文件中保存的数值的字节序与内存中相同或不同;
所述的格式描述文件ZFS可以嵌套包含,被包含的ZFS中的复合类型可以在包含它的ZFS文件中使用。
2.根据权利要求1所述的一种生成用于读写二进制文件代码的方法,其特征在于:所述的变量的类型可以是基本类型或复合类型;其中基本类型至少包括1字节~8字节的整数、单字节与宽字节字符串、2~8字节浮点数、任意Bit的数字,且根据需要可对代码生成工具进行扩展;
变量是否保存在文件中,可在格式描述文件ZFS中通过表达式动态指定;该表达式可以被生成相应的代码;
所述的复合类型变量由多个变量组合而成,复合类型变量可定义传入的参数;参数的类型可以是基本类型,也可以是复合类型;
所述的复合类型变量可被定义为联合体,在输出至二进制文件时复合类型中的多个变量占用同一存储空间且只有一个为有效;
所述的复合类型可定义回写信息,所述的回写信息包括记录的数量、在文件中的偏移、保存的Size。
3.根据权利要求2所述的一种生成用于读写二进制文件代码的方法,其特征在于:所述的变量是一个数组,数组长度可以通过表达式动态指定。
4.根据权利要求2所述的一种生成用于读写二进制文件代码的方法,其特征在于:所述的变量之间存在对齐标识,使变量的起始位置按照整数字节数对齐存储。
5.根据权利要求2所述的一种生成用于读写二进制文件代码的方法,其特征在于:所述的变量与变量之间存在忽略区间,使变量之间加入空白区域。
6.根据权利要求2所述的一种生成用于读写二进制文件代码的方法,其特征在于:除复合类型中的变量外,还可定义临时变量用于读写过程中的计算。
7.根据权利要求1所述的一种生成用于读写二进制文件代码的方法,其特征在于:将所述的格式描述文件ZFS保存为基于XML的扩展格式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410047843.7A CN104834508A (zh) | 2014-02-11 | 2014-02-11 | 一种生成用于读写二进制文件代码的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410047843.7A CN104834508A (zh) | 2014-02-11 | 2014-02-11 | 一种生成用于读写二进制文件代码的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104834508A true CN104834508A (zh) | 2015-08-12 |
Family
ID=53812419
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410047843.7A Pending CN104834508A (zh) | 2014-02-11 | 2014-02-11 | 一种生成用于读写二进制文件代码的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104834508A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106202497A (zh) * | 2016-07-20 | 2016-12-07 | 惠州Tcl移动通信有限公司 | 一种检查并优化应用的压缩文件字节对齐的方法及系统 |
CN109960590A (zh) * | 2019-03-26 | 2019-07-02 | 北京简约纳电子有限公司 | 一种优化嵌入式系统诊断打印的方法 |
CN112148673A (zh) * | 2020-09-22 | 2020-12-29 | 北京中房智宝科技有限公司 | 一种多二进制合并成一个二进制文件读写错误的解决方法 |
-
2014
- 2014-02-11 CN CN201410047843.7A patent/CN104834508A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106202497A (zh) * | 2016-07-20 | 2016-12-07 | 惠州Tcl移动通信有限公司 | 一种检查并优化应用的压缩文件字节对齐的方法及系统 |
CN109960590A (zh) * | 2019-03-26 | 2019-07-02 | 北京简约纳电子有限公司 | 一种优化嵌入式系统诊断打印的方法 |
CN112148673A (zh) * | 2020-09-22 | 2020-12-29 | 北京中房智宝科技有限公司 | 一种多二进制合并成一个二进制文件读写错误的解决方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105608088B (zh) | 一种基于配置文件的数据库自动创建与数据动态记录方法 | |
CN102541521B (zh) | 基于结构化查询语言的操作指令自动生成装置及方法 | |
CN101937427B (zh) | 一种基于浏览器的内容编辑及发布的系统及方法 | |
CN102682098B (zh) | 检测网页内容变更的方法及装置 | |
DE60128895D1 (de) | Methode und schema zum anwenden von xml schemata | |
Chillón et al. | A model-driven approach to generate schemas for object-document mappers | |
WO2012177394A2 (en) | Dynamically updating a running page | |
US9524366B1 (en) | Annotations to identify objects in design generated by high level synthesis (HLS) | |
CN102402556A (zh) | Xml文件的校验方法和装置 | |
CN106126504A (zh) | A2l语法解析器及方法 | |
CN108509199A (zh) | 自动生成中文注释的方法、装置、设备及存储介质 | |
CN104834508A (zh) | 一种生成用于读写二进制文件代码的方法 | |
CN103077038B (zh) | 动态生成和编译.net项目的方法 | |
CN102937992A (zh) | 一种基于Java与XML数据库的对象映射转换设计方法 | |
CN105468366A (zh) | 一种基于Qt地面站的智能界面 | |
CN104572744A (zh) | 结构化文档生成方法和装置 | |
CN106372002B (zh) | 一种数据存储方法及读取还原方法 | |
CN103235757B (zh) | 基于自动化造数对输入域测试对象进行测试的装置和方法 | |
CN105867886B (zh) | 一种写表格的方法及装置 | |
CN105653669A (zh) | 超文本标记语言生成方法及装置 | |
CN114116691A (zh) | 数据导入校验方法、系统、装置及计算机可读介质 | |
CN103150445B (zh) | 一种matlab模型变量的剖析方法及装置 | |
CN104281604A (zh) | 生成Targetlink数据字典分层树的方法和系统 | |
CN105843661B (zh) | 一种面向主机系统的代码重定位方法及其系统 | |
CN103049503A (zh) | 基于结构匹配的uml模型查询方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20150812 |