CN101202736B - 一种基于抽象语法标记实现编解码的方法 - Google Patents
一种基于抽象语法标记实现编解码的方法 Download PDFInfo
- Publication number
- CN101202736B CN101202736B CN2006101051523A CN200610105152A CN101202736B CN 101202736 B CN101202736 B CN 101202736B CN 2006101051523 A CN2006101051523 A CN 2006101051523A CN 200610105152 A CN200610105152 A CN 200610105152A CN 101202736 B CN101202736 B CN 101202736B
- Authority
- CN
- China
- Prior art keywords
- decoding
- data type
- coding
- parameter
- information
- 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.)
- Active
Links
Images
Landscapes
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Communication Control (AREA)
Abstract
本发明涉及一种基于抽象语法标记实现编解码的方法,包括:(A)数据结构的定义:根据分析工具的要求和协议的描述,定义出协议中消息的结构,编码时由应用层填写结构中的数据,而解码时由编解码模块填写结构中的数据;(B)结构信息的生成:利用分析工具分析定义的结构,分析出结构及参数属性并记录到文件中,以供编解码模块调用;(C)编解码的调度:获取参数的信息,根据获得的信息进行数据结构的拆分和数值填写以及将结构数据类型分解成简单数据类型进行编解码;(D)简单数据类型的编解码:根据调度模块的调用进行简单数据类型的编解码。该方法仅对简单数据类型进行编解码,能够大幅降低程序开发维护的工作量以及难度。
Description
技术领域:
本发明涉及数据通信技术领域,特别是涉及一种通讯网络系统中基于抽象语法标记实现信息传递时的编解码的方法。
背景技术:
ASN.1(Abstract Syntax Notation One抽象语法标记)是一种独立于机器的描述语言,用于描述在网络上传递的消息,特别是广泛应用于移动网络通讯系统中的各种协议的传输。例如RANAP(Radio Access NetworkApplication Part无线接入网络应用部分)协议、MAP(Mobile ApplicationPart移动应用部分)协议、H.248协议等。ASN.1的编码方式能够快速并可靠的传输可扩展信息——这是无线带宽的一个优势。由于从1982年以后ASN.1已经成为一个国际标准,所以它的编码规则是成熟的并且它有长期的可靠性和互用性的跟踪记录。ASN.1的数据类型包括:1、简单数据类型:是ASN.1中规定的不包含子结构的数据类型,例如:Integer,Boolean,Bit String(比特串类型)等;2、结构数据类型:是ASN.1中规定的包含子结构的数据类型,例如:Sequence(序列类型),Set(集合类型),Choice(选择类型)等。
然而,ASN.1编解码是一个很费时费工的工作,目前多数的ASN.1编解码方式是针对协议的,需要对于不同的协议以及不同的消息内容编写不同的编解码程序,当协议发生改变时,编解码程序也必须进行相应的修改,不同版本协议的编解码程序也存在较大的区别,这些都增加了编写编解码程序员的工作量以及程序出错的几率。
已公开中国专利申请:用于抽象语法表示法高层应用的编解码方法(公开号:1635763A,申请号:200310104144.3)也提供了一种通用的编解码方法,编码过程如下:根据高层应用协议基于ASN.1的数据类型和关系,构建编码格式串,利用格式串生成相应空值的二叉树结构,然后根据需要参照应用的 操作编码定义向结构中插值,最后遍历二叉树生成二进制信息流数据;解码过程如下:根据编码格式串生成收到ASN.1编码信息的二叉树数据结构,然后根据二叉树的遍历的反向过程解码,并把数据赋给数据结构中,业务逻辑再通过二叉树的节点查询来取得数据信息。但该方法的信息编码格式串的定义方法未加说明及应用层使用数据时需要查询二叉树才能获取数据,致使应用层使用复杂,不方便。
发明内容:
本发明的目的就是利用词法语法分析工具,提供一种针对结构的统一编解码方法,解决上述现有技术中存在的技术问题。本发明的方法适用于所有通讯网络中需要进行编解码的协议。
为了达到上述目的,本发明提供以下技术方案:
一种基于抽象语法标记实现编解码的方法,包括以下步骤:
数据结构的定义:根据分析工具的要求和协议的描述,定义出协议中消息的结构,编码时由应用层填写结构中的数据,而解码时由编解码模块填写结构中的数据;
结构信息的生成:利用分析工具分析定义的结构,分析出结构及参数信息并记录到文件中,以供编解码模块调用;
所述结构信息包含消息的所有参数,其参数可以为简单数据类型,也可为结构数据类型;
所述结构及参数信息存储的内容至少包括:
结构中参数自身的信息:变量类型,起始地址,变量名,占用字节,变量数量,指向子结构的指针;
协议规定的属性:标签,赋值范围,协议的数据类型,结构编码或简单编码,可选/必选,显式/隐式。
编解码的调度:获取结构及参数信息,根据获得的信息进行数据结构的拆分和数值填写以及将结构数据类型分解成简单数据类型进行编解码;
简单数据类型的编解码:根据调度模块的调用进行简单数据类型的编解码;
编码过程包括:
应用层对结构进行赋值,调用编码接口函数;编解码模块获取消息中结构及参数信息,为编码过程进行消息的编码提供详细信息;根据结构及参数信息获取结构中第一个参数的信息;根据参数的信息在结构的内存中获取参数的值;根据获取参数的值判断参数填写是否正确;错误时进行出错处理,输出错误信息;判断参数是简单数据类型还是结构数据类型;如果是结构数据类型,则进行递归调用,进入结构数据类型的子类型,进行子类型的编码过程;若是简单数据类型,则根据协议的编码规则进行简单数据类型的编码;拼接编码产生的码流;若结构未结束则获取下一个参数,进行下一个参数的编码,直至结构结束;若结构结束则返回编码的码流;
解码过程包括:
应用层将接收的码流传入解码接口函数;编解码模块获取消息中结构及参数信息;根据结构及参数信息获取结构中参数的属性;根据参数属性解析出码流中包含的信息和值;判断参数为简单数据类型还是结构数据类型;如果是结构数据类型则进行递归调用,进入结构数据类型的子类型,进行子类型的解码过程;若为简单数据类型则获取参数在结构内存中的地址信息;向结构中赋值,将解出的码流写入到结构中的相应地址中;直至码流结束,返回结构的内容。
本发明与现有技术相比具有以下特点:
本方法根据协议语法,针对不同的协议,定义应用层使用的头文件(即协议中消息的结构)。用分析工具来读取头文件,生成编解码需要的结构及参数信息。编解码模块根据这些信息以及通过信息获取的结构中参数地址和值进行编解码,编解码模块仅针对协议中的基本数据类型进行编解码,大幅降低程序开发维护的工作量以及难度。
程序员只需针对不同协议定义不同的数据结构,不必编写针对不同协议的不同编解码程序,所以本发明能够简单,快捷实现协议的编解码。
在编码方式不改变的情况下,当协议发生改变或协议升级版本时,无需重新编写编解码的程序,只需修改根据协议定义的数据结构的头文件,使得它更加灵活和具有扩展性。
根据协议定义的数据结构的头文件是按照协议来定义的,并根据协议的语法注释数据的属性,使得头文件更具可读性。
统一的编解码接口,编解码模块对外只提供两个接口函数(编码函数和解码函数),使得应用层不必关心编解码的内部实现机制。为程序的开发,升级提供了方便。
应用层使用数据时,只需从结构中获取数据或向结构中赋值,简化了应用层的使用。
附图说明:
图1是词法语法分析工具的原理图;
图2是ASN.1编解码的工作原理图;
图3是ASN.1数据类型定义示意图;
图4是消息的结构信息存储方式示意图;
图5是消息的结构信息存储内容示意图;
图6是编解码调度示意图;
图7是编码的流程图;
图8是解码的流程图。
具体实施方式:
以下结合附图详细说明本发明的具体实施方式。本实施例中使用的协议语法为ASN.1。
图1为词法语法分析工具的原理图,包含了正则表达式的词法语法规则作为其输入的程序,并且为每一个词法表达式被匹配时定义一种动作。用于通 知语法规则,当语法规则被匹配时,根据定义的动作产生所需的数据。编译器根据词法语法规则生成分析工具。
分析工具指定根据协议定义的头文件作为它的输入,并根据语法规则的分析过程,记录结构属性和ASN.1属性,并产生特定格式的输出文件,即以树形格式(图4)存储分析出的结构的参数属性和ASN.1属性(图5)。
图2是ASN.1编解码的工作流程图。
步骤201:数据结构的定义,根据协议的ASN.1语法定义结构头文件(即数据结构)。
步骤202:结构信息的生成,用分析工具分析结构头文件,产生结构信息数据。
步骤203:编解码的调度,应用层向编解码模块传入待编码结构或ASN.1码流的数据,编解码的调度模块通过结构信息获得结构中的参数和参数的ASN.1属性并将结构数据类型拆分成简单数据类型。
步骤204:简单数据类型的编解码,根据ASN.1简单数据类型的编码方式进行编解码。
图3展示了ASN.1数据类型同编程语言数据类型的对应关系,其中:
Sequence,Set,Choice类型对应为包含表示子参数是否被填写的标志位(一个参数占一个Bit)和子参数的结构;
SequenceOf,SetOf类型对应为包含表示选用的数组个数的标志位(数组的最大维数)和子参数数组的结构;
OCTET STRING,NUMBER STRING,PRINT STRING.... 等字符串类型对应为包含使用字节数和字符串值的结构;
BIT STRING字符串类型对应为包含使用字节数,未使用比特数和字符串值的结构;
除上述的ASN.1数据类型以外的其他的ASN.1数据类型(如Integer)对应为编程语言相应的数据类型(如整型)。
图4展示了结构信息存储的方式,以一种树形结构的方式存储结构信息,根节点作为消息的主结构。包含消息的所有参数,其参数可以为简单数据类型,也可为结构数据类型。结构数据类型应包含指向它的子结构的指针。
图5展示了结构信息存储的内容:
a.变量类型,起始地址,变量名,占用字节,变量数量,指向子结构的指针等结构中参数自身的信息。
b.ASN.1标签,赋值范围,ASN.1类型,结构编码或简单编码,可选/必选,显式/隐式等ASN.1规定的属性。
图6是编解码调度示意图,展示了编解码调度模块如何将结构进行拆分以及结构内容的填写:调度模块从参数信息中获取的参数的起始地址等于0,占用字节为4,变量名为A1,编码时就能在结构的内存中取得A1地址并在结构的A1参数信息中获得A1的ASN.1属性。
编码时,调度模块根据参数的起始地址,大小,变量名等信息就能在结构的内存中获取相应的值100,并连同ASN.1属性一起传入简单数据类型编解码的编码模块即可获得标准的ASN.1码流。
解码时,将参数的ASN.1属性和ASN.1码流传入简单数据类型编解码的解码模块,解出数据值100,再根据其起始地址和大小,变量名等信息,将数据填入结构中。
图7是编码的流程图,编码过程包括以下步骤:
步骤701:应用层对结构进行赋值,调用编码接口函数(主要输入参数包括:消息操作码,协议中消息结构的指针)进行编码过程;
步骤702:编解码模块获取消息结构信息,为编码过程进行消息的编码提供参数的详细信息;
步骤703:根据消息结构信息获取结构中第一个参数的信息;
步骤704:根据参数的信息在结构的内存中获取参数的值;
步骤705:根据获取参数的值判断参数填写是否正确(包括参数是否填写, 范围是否正确等);
步骤706:错误时进行出错处理,输出错误信息;
步骤707:判断参数是简单数据类型还是结构数据类型;
步骤708:如果是结构数据类型,则进行递归调用,进入结构数据类型的子类型,返回步骤703,进行子类型的编码过程;
步骤709:若是简单数据类型,则根据ASN.1的编码规则进行简单数据类型的编码;
步骤710:拼接编码产生的码流;
步骤711:判断结构是否结束(即是否是最后一个参数);
步骤712:若结构未结束则获取下一个参数,返回步骤703,进行下一个参数的编码,直至结构结束。若结构结束则返回编码的码流。
图8是解码的流程图。解编码过程包括以下步骤:
步骤801:应用层将ASN.1码流传入解码接口函数;
步骤802:编解码模块获取消息结构信息;
步骤803:根据消息结构信息获取结构中参数的ASN.1属性;
步骤804:根据参数属性解析出码流中包含的信息和值;
步骤805:判断参数为简单数据类型还是结构数据类型;
步骤806:如果是结构数据类型则进行递归调用,进入结构数据类型的子类型,返回步骤803,进行子类型的解码过程;
步骤807:若为简单数据类型则获取参数在结构内存中的地址信息。
步骤808:向结构中赋值,将解出的码流写入到结构中的相应地址中;
步骤809:判断码流是否为码流结尾;
步骤810:若没有结束则进行下一个参数的解码,返回步骤803,直至码流结束。然后,返回结构的内容。
以上公开的仅为本发明的一个具体实施例,但是本发明并非局限于此,任何本领域的技术人员能思之的变化,都应落在本发明的保护范围内。
Claims (3)
1.一种基于抽象语法标记实现编解码的方法,其特征在于包括以下步骤:
(A)、数据结构的定义:根据分析工具的要求和协议的描述,定义出协议中消息的结构,编码时由应用层填写结构中的数据,而解码时由编解码模块填写结构中的数据;
(B)、结构信息的生成:利用分析工具分析定义的结构,分析出结构及参数信息并记录到文件中,以供编解码模块调用;
所述结构信息包含消息的所有参数,其参数可以为简单数据类型,也可为结构数据类型;
所述结构及参数信息存储的内容至少包括:
结构中参数自身的信息:变量类型,起始地址,变量名,占用字节,变量数量,指向子结构的指针;
协议规定的属性:标签,赋值范围,协议的数据类型,结构编码或简单编码,可选/必选,显式/隐式;
(C)、编解码的调度:获取结构及参数信息,根据获得的信息进行数据结构的拆分和数值填写以及将结构数据类型分解成简单数据类型进行编解码;
(D)、简单数据类型的编解码:根据调度模块的调用进行简单数据类型的编解码;
编码过程包括:
应用层对结构进行赋值,调用编码接口函数;编解码模块获取消息中结构及参数信息,为编码过程进行消息的编码提供详细信息;根据结构及参数信息获取结构中第一个参数的信息;根据参数的信息在结构的内存中获取参数的值;根据获取参数的值判断参数填写是否正确;错误时进行出错处理,输出错误信息;判断参数是简单数据类型还是结构数据类型;如果是结构数据类型,则进行递归调用,进入结构数据类型的子类型,进行子类型的编码过程;若是简单数据类型,则根据协议的编码规则进行简单数据类型的编码;拼接编码产生的码流;若结构未结束则获取下一个参数,进行下一个参数的编 码,直至结构结束;若结构结束则返回编码的码流;
解码过程包括:
应用层将接收的码流传入解码接口函数;编解码模块获取消息中结构及参数信息;根据结构及参数信息获取结构中参数的属性;根据参数属性解析出码流中包含的信息和值;判断参数为简单数据类型还是结构数据类型;如果是结构数据类型则进行递归调用,进入结构数据类型的子类型,进行子类型的解码过程;若为简单数据类型则获取参数在结构内存中的地址信息;向结构中赋值,将解出的码流写入到结构中的相应地址中;直至码流结束,返回结构的内容。
2.根据权利要求1所述实现编解码的方法,其特征在于所述结构及参数信息是以一种树形结构的方式存储,根节点作为消息的主结构。
3.根据权利要求1所述的实现编解码的方法,其特征在于所述步骤(C)进一步还包括:
所述调度模块从参数信息中获取参数的起始地址,占用字节,变量名,编码时就能在结构的内存中取得变量地址并在结构的变量参数信息中获得变量的属性;
编码时,调度模块根据参数的起始地址,大小,变量名信息就能在结构的内存中获取相应的数值,并连同属性一起传入简单数据类型编解码的编码模块即可获得标准的协议码流;
解码时,将参数的属性和协议码流传入简单数据类型编解码的解码模块,解析出数值,再根据其起始地址和大小,变量名信息,将数据填入结构中。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2006101051523A CN101202736B (zh) | 2006-12-13 | 2006-12-13 | 一种基于抽象语法标记实现编解码的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2006101051523A CN101202736B (zh) | 2006-12-13 | 2006-12-13 | 一种基于抽象语法标记实现编解码的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101202736A CN101202736A (zh) | 2008-06-18 |
CN101202736B true CN101202736B (zh) | 2012-07-25 |
Family
ID=39517702
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2006101051523A Active CN101202736B (zh) | 2006-12-13 | 2006-12-13 | 一种基于抽象语法标记实现编解码的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101202736B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104717032A (zh) * | 2013-12-14 | 2015-06-17 | 中国航空工业集团公司第六三一研究所 | 一种适用于afdx网络数据透明传输的编解码方法 |
CN105139053A (zh) * | 2015-10-15 | 2015-12-09 | 江苏本能科技有限公司 | 射频识别读写器接口协议调试装置及方法 |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102281259B (zh) * | 2010-06-11 | 2014-01-29 | 深圳市金蝶中间件有限公司 | 对请求信息进行解码的方法及装置 |
CN102523219B (zh) * | 2011-12-16 | 2015-01-14 | 清华大学 | 正则表达式匹配系统及匹配方法 |
CN103036877A (zh) * | 2012-12-10 | 2013-04-10 | 北京中创信测科技股份有限公司 | 一种基于tlv格式协议的编解码代码生成装置及方法 |
CN103944914B (zh) * | 2014-04-28 | 2018-01-16 | 南京熊猫电子股份有限公司 | 卫星通信系统中csn.1协议处理器的实现方法 |
CN105094756B (zh) * | 2014-04-28 | 2018-07-03 | 阿里巴巴集团控股有限公司 | 数据读写方法和装置 |
US9955365B2 (en) * | 2015-04-15 | 2018-04-24 | Qualcomm Incorporated | Conditional progressive encoding and decoding |
-
2006
- 2006-12-13 CN CN2006101051523A patent/CN101202736B/zh active Active
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104717032A (zh) * | 2013-12-14 | 2015-06-17 | 中国航空工业集团公司第六三一研究所 | 一种适用于afdx网络数据透明传输的编解码方法 |
CN104717032B (zh) * | 2013-12-14 | 2018-05-08 | 中国航空工业集团公司第六三一研究所 | 一种适用于afdx网络数据透明传输的编解码方法 |
CN105139053A (zh) * | 2015-10-15 | 2015-12-09 | 江苏本能科技有限公司 | 射频识别读写器接口协议调试装置及方法 |
CN105139053B (zh) * | 2015-10-15 | 2018-01-30 | 江苏本能科技有限公司 | 射频识别读写器接口协议调试装置及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN101202736A (zh) | 2008-06-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101202736B (zh) | 一种基于抽象语法标记实现编解码的方法 | |
US5339421A (en) | General data stream parser for encoding and decoding data and program interface for same | |
US7158990B1 (en) | Methods and apparatus for data conversion | |
CN110704063B (zh) | 编译和执行智能合约的方法及装置 | |
CN110688122B (zh) | 编译和执行智能合约的方法及装置 | |
CN100389572C (zh) | 一种远程调用通信组件的系统及方法 | |
CN110704064B (zh) | 编译和执行智能合约的方法及装置 | |
US8892991B2 (en) | Encoder compiler, computer readable medium, and communication device | |
CN110825385B (zh) | React Native离线包的构建方法及存储介质 | |
EP2124419B1 (en) | An object oriented management device for asn.1 message | |
CN115639980A (zh) | 一种低代码平台可拖拽的前端逻辑编排方法及装置 | |
CN101807205A (zh) | 用于处理xml数据的处理模块、设备和方法 | |
CN111324619A (zh) | 微服务系统中的对象更新方法、装置、设备和存储介质 | |
CN112667287A (zh) | 规则文件的创建方法、装置、设备及计算机可读存储介质 | |
CN101499015A (zh) | 一种高级语言转换成其它高级语言的方法及转换器 | |
CN101201750B (zh) | 利用语法词法分析工具为编解码提供数据的方法 | |
CN104572102A (zh) | Java中的中文乱码解决方法 | |
CN111880800B (zh) | 应用下载方法与应用下载系统 | |
CN111552839B (zh) | 一种基于xml模板的对象转换方法 | |
CN202143092U (zh) | 报文处理系统 | |
CN101324846B (zh) | 根据asn.1信息动态创建数据模型的方法 | |
Riedel et al. | A model driven internet of things | |
US7243341B2 (en) | Scripting language for processing typed structured data | |
CN100562008C (zh) | 消息处理系统及其处理方法 | |
CN114970474A (zh) | 一种基于数据监听的excel导入导出方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |