数据交换编解码方法和系统与流程

文档序号:30086724发布日期:2022-05-18 06:02阅读:202来源:国知局
数据交换编解码方法和系统与流程

1.本发明涉及数据交换编解码技术领域,尤其是涉及一种数据交换编解码方法和系统。


背景技术:

2.随着物联网、5g等新型技术的快速发展,很多领域迎来了高速发展的新信息时代。终端与服务器之间的网络中,无时无刻不充斥着高速传输的海量数据,而这些数据也正是企业赖以发展和提效的基础。
3.现有的数据交换编解码方法包括asn.1(abstract syntax notation.one)、xml(extensible markup language)和json(javascript object notation)等等。其中asn.1在通信领域使用较多,而xml和json则在互联网领域中更为常见。
4.基于xml和json等编解码格式进行交换的数据,如果希望提升传输效率或者改善安全性,往往是通过对部分关键数据进行压缩或者加密的方法,但这样的局部优化有时会事倍功半,并不能保证每次的都能获得比较好的成效。而基于asn.1编解码的方法,虽然编解码传输效率和安全性都很高,但是门槛很高,数据抽象描述对非专业人士很不友好,导致此技术在很多企业和工业软件里没有应用。


技术实现要素:

5.本发明的目的在于克服上述技术不足,提出一种数据交换编解码方法和系统,解决现有技术中编解码方法占据较大的网络带宽,多方平台之间的对接不便,且使用的技术门槛较高的技术问题。
6.为达到上述技术目的,第一方面,本发明的技术方案提供一种数据交换编解码方法,包括步骤:
7.在规则解释器中配置编解码规则;
8.获取程序数据,所述程序数据包括基本类型数据和结构体类型数据;
9.在编码器中根据所述编解码规则对所述程序数据进行编码得到编码后码流,并发送到解码端;
10.在解码端接收所述编码后码流,在解码器中根据所述编解码规则对所述编码后码流进行解码得到所述程序数据。
11.与现有技术相比,本发明提供数据交换编解码方法的有益效果包括:
12.极大减少了网络带宽的开销:使用本发明编解码方法,能够极大地压缩网络数据的大小,减少了网络带宽的开销,本发明编码后数据在信息不丢失情况下极大地减少码流带宽的占有。经本发明数据交换编解码方法编码后的数据与使用xml格式编码的数据相比,带宽占用能减少80%以上,特别在数据描述信息比较多的情况下有很好的效果。
13.数据交换具有极高的安全性:编解码规则随版本发布,并不会在网络中传输。只要没有编解码规则,无论网络中的交换数据被如何截获,都不会被破解。编解码规则相当于扮
演了“私钥”的角色,这使得数据交换具备了极高的安全性。
14.多方平台之间的高效对接:使用本发明的编解码方法,多方平台间的对接,无需再关注各个平台的编程语言、也无需关注各个平台对外提供的api接口声明方式,只需要各方平台根据编解码规则,实现数据的编码和解码即可高效完成彼此间的对接。
15.工业界编解码民用化:工业界编解码如asn.1是经典的数据交换解决方案,但是由于门槛过高,导致企业级软件里没有得到应用。本发明的编解码设计方法不仅能做到高效和安全,还可以大幅降低学习门槛,易用性极高。
16.根据本发明的一些实施例,所述基本类型数据至少包括以下一种:
17.整数类型数据、浮点类型数据、比特类型数据、布尔类型数据、字符串类型数据。
18.根据本发明的一些实施例,当所述整数类型数据为uint8类型,所述编解码规则包括:
19.当需要编码的整型数值在0到255的范围,对所述整型数值编码得到编码结果,所述编码结果为所述整型数值。
20.根据本发明的一些实施例,当所述整数类型数据为uint16类型,所述编解码规则包括:
21.当需要编码的整型数值在0到65535的范围,对所述整型数值编码得到编码结果,所述编码结果包括n1和n0,n1是对256取整的结果,n0是对256取余的结果。
22.根据本发明的一些实施例,当所述整数类型数据为uint32类型,所述编解码规则包括:
23.当需要编码的整型数值在0到4294967295的范围,对所述整型数值编码得到编码结果,所述编码结果包括n3、n2、n1和n0,所述整型数值对65536取整得到d1,所述整型数值对65536取余得d2,n3是d1对256取整的结果,n2是d1对256取余的结果,n1是d2对256取整的结果,n0是d2对256取余的结果。
24.根据本发明的一些实施例,所述浮点类型数据编解码规则包括:
25.根据所述浮点类型数据的符号位、有效数字和指数位对所述浮点类型数据进行编码得到第一数值,再将所述第一数值按照uint32类型的编解码规则进行编码。
26.根据本发明的一些实施例,所述比特类型数据编解码规则包括:
27.当所述比特类型数据为1,编码结果为1;
28.当所述比特类型数据为0,编码结果为0。
29.根据本发明的一些实施例,所述字符串类型数据编解码规则包括:
30.根据所述字符串类型数据的数据长度,和所述字符串类型数据的字符转换成十进制的ascii码对所述字符串类型数据进行编码。
31.根据本发明的一些实施例,所述结构体类型数据编解码规则包括:
32.将所述结构体类型数据的基本类型元素顺序展开,并对所述基本类型元素进行编码。
33.根据本发明的一些实施例,当所述整数类型数据为int8类型,所述编解码规则包括:如果被编码的整数不在-128到127的范围,则报错,否则按照如下原则进行编码:
34.(1)如果被编码整数在0到127的范围,则直接返回被编码整数。例如,对数字18进行编码,编码后的结果就是18。
35.(2)如果被编码整数在-128到-1的范围,则先对被编码整数取绝对值得到d1,然后将d1按照位取反(即0

1,1

0)得到d2,最后将d2+1得到最终编码后的结果n1。例如,对数字-128进行编码,首先取绝对值得到d1为128,对d1按位取反得到d2,再对d2+1得到最终结果n0。
36.根据本发明的一些实施例,当所述整数类型数据为int16类型,所述编解码规则包括:如果被编码的整数不在-32768到32767的范围,则报错,否则按照如下原则进行编码:
37.(1)如果被编码整数在0到32767的范围,则同uint16类型编码。例如,对数字258进行编码,编码后的结果就是1,2。
38.(2)如果被编码整数在-32768到-1的范围,则先对被编码整数取绝对值得到d1,然后将d1按照位取反(即0

1,1

0)得到d2,最后将d2+1得到d3,再对d3进行uint16类型编码。例如,对数字-1进行编码,首先得到d1为1(二进制:0000 0000 0000 0001),对d1按位取反得到d2(1111 1111 1111 1110),再对d2+1得到d3=65535(1111 1111 1111 1111),进而按照uint16编码得到255,255。
39.根据本发明的一些实施例,当所述整数类型数据为int32类型,所述编解码规则包括:
40.如果被编码的整数不在-2147483648到2,47483647的范围,则报错,否则按照如下原则进行编码:
41.(1)如果被编码整数在0到2147483647的范围,则同uint32类型编码。例如,对数字65793进行编码,编码后的结果就是0,1,1,1。
42.(2)如果被编码整数在-2147483648到-1的范围,则先对被编码整数取绝对值得到d1,然后将d1按照位取反(即0

1,1

0)得到d2,最后将d2+1得到d3,再对d3进行uint32类型编码。例如,对数字-10进行编码,首先得到d1为10(二进制:0000 0000 0000 0000 0000 0000 0000 1010),对d1按位取反得到d2(1111 1111 1111 1111 1111 1111 1111 0101),再对d2+1得到d3=2147483648(1111 1111 1111 1111 1111 1111 1111 0110),进而按照uint32编码得到255,255,255,246。
43.根据本发明的一些实施例,所述布尔类型数据编解码规则包括:
44.如果被编码的数据不为true或者false,则报错,否则将true转换成1,false转换成0,再按照uint8进行编码。例如,对false进行编码,编码后结果为0。
45.第二方面,本发明提供了一种数据交换编解码系统,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如第一方面中任意一项所述的数据交换编解码方法。
46.本发明的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
47.本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中摘要附图要与说明书附图的其中一幅完全一致:
48.图1为本发明一个实施例提供的数据交换编解码方法的流程图。
具体实施方式
49.为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
50.需要说明的是,虽然在系统示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于系统中的模块划分,或流程图中的顺序执行所示出或描述的步骤。说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
51.本发明提供了一种数据交换编解码方法,极大减少了网络带宽的开销:使用本发明编解码方法,能够极大地压缩网络数据的大小,减少了网络带宽的开销。数据交换具有极高的安全性:编解码规则随版本发布,并不会在网络中传输。只要没有编解码规则,无论网络中的交换数据被如何截获,都不会被破解。编解码规则相当于扮演了“私钥”的角色,这使得数据交换具备了极高的安全性。
52.下面结合附图,对本发明实施例作进一步阐述。
53.参照图1,图1为本发明一个实施例提供的数据交换编解码方法的流程图,数据交换编解码方法包括但是不仅限于步骤s110至步骤s140。
54.步骤s110,在规则解释器中配置编解码规则;
55.步骤s120,获取程序数据,程序数据包括基本类型数据和结构体类型数据;
56.步骤s130,在编码器中根据编解码规则对程序数据进行编码得到编码后码流,并发送到解码端;
57.步骤s140,在解码端接收编码后码流,在解码器中根据编解码规则对编码后码流进行解码得到程序数据。
58.在一实施例中,数据交换编解码方法包括步骤:在规则解释器中配置编解码规则;获取程序数据,程序数据包括基本类型数据和结构体类型数据;在编码器中根据编解码规则对程序数据进行编码得到编码后码流,并发送到解码端;在解码端接收编码后码流,在解码器中根据编解码规则对编码后码流进行解码得到程序数据。
59.本实施例提供的数据交换编解码方法极大减少了网络带宽的开销:使用本发明编解码方法,能够极大地压缩网络数据的大小,减少了网络带宽的开销。本实施例提供的数据交换编解码方法的数据交换过程具有极高的安全性:编解码规则随版本发布,并不会在网络中传输。只要没有编解码规则,无论网络中的交换数据被如何截获,都不会被破解。编解码规则相当于扮演了“私钥”的角色,这使得数据交换具备了极高的安全性。
60.本实施例提供的数据交换编解码方法实现了多方平台之间的高效对接:使用本发明的编解码方法,多方平台间的对接,无需再关注各个平台的编程语言、也无需关注各个平台对外提供的api接口声明方式,只需要各方平台根据编解码规则,实现数据的编码和解码即可高效完成彼此间的对接。本实施例提供的数据交换编解码方法实现了工业界编解码民用化:工业界编解码如asn.1是经典的数据交换解决方案,但是由于门槛过高,导致企业级软件里没有得到应用。本发明的编解码设计方法不仅能做到高效和安全,还可以大幅降低学习门槛,易用性极高。
61.在一实施例中,数据交换编解码方法包括步骤:在规则解释器中配置编解码规则;
获取程序数据,程序数据包括基本类型数据和结构体类型数据;在编码器中根据编解码规则对程序数据进行编码得到编码后码流,并发送到解码端;在解码端接收编码后码流,在解码器中根据编解码规则对编码后码流进行解码得到程序数据。基本类型数据至少包括以下一种:整数类型数据、浮点类型数据、比特类型数据、布尔类型数据、字符串类型数据。
62.在一实施例中,数据交换编解码方法包括步骤:在规则解释器中配置编解码规则;获取程序数据,程序数据包括基本类型数据和结构体类型数据;在编码器中根据编解码规则对程序数据进行编码得到编码后码流,并发送到解码端;在解码端接收编码后码流,在解码器中根据编解码规则对编码后码流进行解码得到程序数据。基本类型数据至少包括以下一种:整数类型数据、浮点类型数据、比特类型数据、布尔类型数据、字符串类型数据。
63.当整数类型数据为uint8类型,编解码规则包括:当需要编码的整型数值在0到255的范围,对整型数值编码得到编码结果,编码结果为整型数值。如果被编码的整数不在0到255的范围,则报错,否则编码直接返回被编码的整数。例如,对数字18进行编码,编码后的结果就是18。
64.在一实施例中,数据交换编解码方法包括步骤:在规则解释器中配置编解码规则;获取程序数据,程序数据包括基本类型数据和结构体类型数据;在编码器中根据编解码规则对程序数据进行编码得到编码后码流,并发送到解码端;在解码端接收编码后码流,在解码器中根据编解码规则对编码后码流进行解码得到程序数据。基本类型数据至少包括以下一种:整数类型数据、浮点类型数据、比特类型数据、布尔类型数据、字符串类型数据。
65.当整数类型数据为uint16类型,编解码规则包括:当需要编码的整型数值在0到65535的范围,对整型数值编码得到编码结果,编码结果包括n1和n0,n1是对256取整的结果,n0是对256取余的结果。如果被编码的整数不在0到65535的范围,则报错,否则编码返回两个0-255的整数:n1,n0。其中,n1是表示对256取整的结果,n0表示对256取余的结果。例如,对数字258进行编码,编码后的结果就是1,2。
66.在一实施例中,数据交换编解码方法包括步骤:在规则解释器中配置编解码规则;获取程序数据,程序数据包括基本类型数据和结构体类型数据;在编码器中根据编解码规则对程序数据进行编码得到编码后码流,并发送到解码端;在解码端接收编码后码流,在解码器中根据编解码规则对编码后码流进行解码得到程序数据。基本类型数据至少包括以下一种:整数类型数据、浮点类型数据、比特类型数据、布尔类型数据、字符串类型数据。
67.当整数类型数据为uint32类型,编解码规则包括:当需要编码的整型数值在0到4294967295的范围,对整型数值编码得到编码结果,编码结果包括n3、n2、n1和n0,整型数值对65536取整得到d1,整型数值对65536取余得d2,n3是d1对256取整的结果,n2是d1对256取余的结果,n1是d2对256取整的结果,n0是d2对256取余的结果。如果被编码的数字不在0到4294967295的范围,则报错,否则编码返回四个0-255的整数:n3,n2,n1,n0。假设被编码数对65536取整得到d1,对65536取余得d2,那么n3是表示d1对256取整的结果,n2是表示d1对256取余的结果,n1是表示d2对256取整的结果,n0是表示d2对256取余的结果。例如,对数字65793进行编码,编码后的结果就是0,1,1,1。
68.在一实施例中,数据交换编解码方法包括步骤:在规则解释器中配置编解码规则;获取程序数据,程序数据包括基本类型数据和结构体类型数据;在编码器中根据编解码规则对程序数据进行编码得到编码后码流,并发送到解码端;在解码端接收编码后码流,在解
码器中根据编解码规则对编码后码流进行解码得到程序数据。基本类型数据至少包括以下一种:整数类型数据、浮点类型数据、比特类型数据、布尔类型数据、字符串类型数据。
69.浮点类型数据编解码规则包括:根据浮点类型数据的符号位、有效数字和指数位对浮点类型数据进行编码得到第一数值,再将第一数值按照uint32类型的编解码规则进行编码。
70.如果被编码的浮点类型数据不在1.2e-38到3.4e+38的范围,则报错,否则按照如下原则进行编码:
71.浮点类型数据f都可以用(-1)^sm2^e来表示,其中s代表符号位,m代表有效数字,e代表指数位。浮点类型数据的编码过程就是确定s、m和e的过程。s、m和e参考国际标准ieee 754,一共占4个字节,按照seee eeee emmm mmmm mmmm mmmm mmmm mmmm进行组织。
72.如果被编码浮点数≥0则s=0,否则s=1;
73.将浮点数去掉符号位后的数值转换成二进制f1,并移动f1小数点e1位(向左移动为正,向右移动为负),使得移动后的二进制数f2形如1.xxxx,则e=127+e1;
74.f2的第一个数始终是1,如果不在m中保存该数(在解码的时候自行添加首位1),那么m便可以多保存一位小数数字,提升表示精度,若小数点后的数据如果不足23位则补0,最终得到m=xxx x000 0000 0000 0000 0000;
75.最后,拼接s、e和m得到d1,再对d1进行uint32进行编码。
76.例如,浮点数为9.5,转换成二进制则为1001.1,即1.0011*2^3,所以s=0,e=130,m=001 1000 0000 0000 0000 0000,合并s、e和m后得到0100 0001 0001 1000 0000 0000 0000 0000,对其进行uint32编码得到65,24,0,0。
77.在一实施例中,数据交换编解码方法包括步骤:在规则解释器中配置编解码规则;获取程序数据,程序数据包括基本类型数据和结构体类型数据;在编码器中根据编解码规则对程序数据进行编码得到编码后码流,并发送到解码端;在解码端接收编码后码流,在解码器中根据编解码规则对编码后码流进行解码得到程序数据。基本类型数据至少包括以下一种:整数类型数据、浮点类型数据、比特类型数据、布尔类型数据、字符串类型数据。
78.比特类型数据编解码规则包括:当比特类型数据为1,编码结果为1;当比特类型数据为0,编码结果为0。
79.在一实施例中,数据交换编解码方法包括步骤:在规则解释器中配置编解码规则;获取程序数据,程序数据包括基本类型数据和结构体类型数据;在编码器中根据编解码规则对程序数据进行编码得到编码后码流,并发送到解码端;在解码端接收编码后码流,在解码器中根据编解码规则对编码后码流进行解码得到程序数据。基本类型数据至少包括以下一种:整数类型数据、浮点类型数据、比特类型数据、布尔类型数据、字符串类型数据。
80.字符串类型数据编解码规则包括:根据字符串类型数据的数据长度,和字符串类型数据的字符转换成十进制的ascii码对字符串类型数据进行编码。string(字符串)类型编码后的格式为l1,a1,a2,...,an。其中,l1表示字符串的字符个数(限定最大255),是十进制的正整数,a1-an均表示字符转换成十进制的ascii码。例如,被编码字符串为“tom”,编码后的结果为3,84,111,109,其中3是表示字符串一共3个字符,而84,111,109则分别代表了字母“t”,“o”和“m”的十进制ascii码。
81.在一实施例中,数据交换编解码方法包括步骤:在规则解释器中配置编解码规则;
获取程序数据,程序数据包括基本类型数据和结构体类型数据;在编码器中根据编解码规则对程序数据进行编码得到编码后码流,并发送到解码端;在解码端接收编码后码流,在解码器中根据编解码规则对编码后码流进行解码得到程序数据。基本类型数据至少包括以下一种:整数类型数据、浮点类型数据、比特类型数据、布尔类型数据、字符串类型数据。
82.结构体类型数据编解码规则包括:将结构体类型数据的基本类型元素顺序展开,并对基本类型元素进行编码。
83.在一实施例中,数据交换编解码方法包括步骤:在规则解释器中配置编解码规则;获取程序数据,程序数据包括基本类型数据和结构体类型数据;在编码器中根据编解码规则对程序数据进行编码得到编码后码流,并发送到解码端;在解码端接收编码后码流,在解码器中根据编解码规则对编码后码流进行解码得到程序数据。基本类型数据至少包括以下一种:整数类型数据、浮点类型数据、比特类型数据、布尔类型数据、字符串类型数据。
84.在一实施例中,当整数类型数据为int8类型,编解码规则包括:如果被编码的整数不在-128到127的范围,则报错,否则按照如下原则进行编码:
85.(1)如果被编码整数在0到127的范围,则直接返回被编码整数。例如,对数字18进行编码,编码后的结果就是18。
86.(2)如果被编码整数在-128到-1的范围,则先对被编码整数取绝对值得到d1,然后将d1按照位取反(即0

1,1

0)得到d2,最后将d2+1得到最终编码后的结果n1。例如,对数字-128进行编码,首先取绝对值得到d1为128,对d1按位取反得到d2,再对d2+1得到最终结果n0。
87.在一实施例中,当整数类型数据为int16类型,编解码规则包括:如果被编码的整数不在-32768到32767的范围,则报错,否则按照如下原则进行编码:
88.(1)如果被编码整数在0到32767的范围,则同uint16类型编码。例如,对数字258进行编码,编码后的结果就是1,2。
89.(2)如果被编码整数在-32768到-1的范围,则先对被编码整数取绝对值得到d1,然后将d1按照位取反(即0

1,1

0)得到d2,最后将d2+1得到d3,再对d3进行uint16类型编码。例如,对数字-1进行编码,首先得到d1为1(二进制:0000 0000 0000 0001),对d1按位取反得到d2(1111 1111 1111 1110),再对d2+1得到d3=65535(1111 1111 1111 1111),进而按照uint16编码得到255,255。
90.在一实施例中,当整数类型数据为int32类型,编解码规则包括:
91.如果被编码的整数不在-2147483648到2,47483647的范围,则报错,否则按照如下原则进行编码:
92.(1)如果被编码整数在0到2147483647的范围,则同uint32类型编码。例如,对数字65793进行编码,编码后的结果就是0,1,1,1。
93.(2)如果被编码整数在-2147483648到-1的范围,则先对被编码整数取绝对值得到d1,然后将d1按照位取反(即0

1,1

0)得到d2,最后将d2+1得到d3,再对d3进行uint32类型编码。例如,对数字-10进行编码,首先得到d1为10(二进制:0000 0000 0000 0000 0000 0000 0000 1010),对d1按位取反得到d2(1111 1111 1111 1111 1111 1111 1111 0101),再对d2+1得到d3=2147483648(1111 1111 1111 1111 1111 1111 1111 0110),进而按照uint32编码得到255,255,255,246。
94.在一实施例中,布尔类型数据编解码规则包括:
95.如果被编码的数据不为true或者false,则报错,否则将true转换成1,false转换成0,再按照uint8进行编码。例如,对false进行编码,编码后结果为0。
96.解码,从本质上理解,就是将收到的字节流转换成程序中目标变量的过程,相当于编码的逆向过程。和编码相同,解码也需要基于规则,并且规则必须与编码规则保持一致。
97.解码侧,根据规则中描述的数据类型(基本类型/结构体类型),按照结构体的层次,顺序提取字节数据并赋值到指定变量。
98.一、基本类型的解码
99.1、uint8类型
100.读取1个字节,并直接返回该字节的数值。例如,当前字节的数值是18,则解码后的结果就是18。
101.2、uint16类型
102.顺序读取2个字节,假设依次为n1,n0,则解码后的数值为n1256+n0。例如,当前读取到的的字节数值依次为1,2时,解码后的结果则为1256+2,即258。
103.3、uint32类型
104.顺序读取4个字节,假设依次为n3,n2,n1,n0,则解码后的结果为n3256^3+n2256^2+n1256+n0。例如,当前读取到的的字节数值依次为0,1,1,1时,解码后的结果则为0256^3+1256^2+1256+1,即65793。
105.4、int8类型
106.读取1个字节,如果首位是0,则表示为正数,直接返回该字节对应的数值;如果首位是1,则表示为负数,先将其减1,再按位取反得到d1,返回-d1。例如,当前字节的数值是128,则解码后的结果就是-128。
107.5、int16类型
108.顺序读取2个字节,假设依次为n1,n0,如果n1的首位是0,则表示正数,则解码后的结果为n1256+n0;如果n1的首位是1,则表示负数,将n1256+n0得到d1,将d1减1后再按位取反得到d2,则解码后的结果为-d2。例如,当前读取到的的字节数值依次为128,1时,返回-32767。
109.6、int32类型
110.顺序读取4个字节,假设依次为n3,n2,n1,n0,如果n3的首位是0,则表示正数,则解码后的数值为n3256^3+n2256^2+n1256+n0;如果n3的首位是1,则表示负数,计算n3256^3+n2256^2+n1256+n0得到d1,将d1减1后再按位取反得到d2,则解码后的结果为-d2。例如,当前读取到的的字节数值依次为255,255,255,255时,返回-1。
111.7、float(浮点)类型
112.顺序读取4个字节,假设依次为n3,n2,n1,n0,计算n3256^3+n2256^2+n1256+n0得到d1,按照seee eeee emmm mmmm mmmm mmmm mmmm mmmm的位排列规则从d1中提取s、e和m的值,进而对m前面补1,得到m1=1.m,e1=e-127,最后将s、e1和m1代入(-1)^sm1*2^e即可得到解码后的二进制浮点数f。例如,当前读取的字节数值依次为65,24,0,0,则d1=0100 0001 0001 1000 0000 0000 0000 0000,所以s=0,e1=3,m1=1.0011,进而二进制f=1001.1,即十进制9.5。
113.8、bit(比特)类型
114.读取1个字节,并直接返回该字节的数值。
115.9、bool(布尔)类型
116.读取1个字节,如果是1,则返回true;如果是0则返回false。
117.10、string(字符串)类型
118.首先读取1个字节,该数值的大小l1表示了字符串的字符个数,接下来顺序读取l1个字节,并将每个字节的数值(十进制ascii码)转换成对应的字符。例如,当前读取到的字节数值依次为3,84,111,109时,l1即为3,表示一共有3个字符,接下来顺序读取84,111和109三个字符,根据ascii码表可以知道,分别对应字母“t”,“o”和“m”,因而解码得到了字符串“tom”。
119.二、结构体类型的解码
120.结构体类型的解码,首先是根据规则中key的定义,在程序中生成对应的数据结构变量,再依次将基本类型数据解码后的结果赋值给每个key对应的value即可。解码端收到的字节流中是不会包含结构体中的key信息,只能依赖规则在程序中生成。
121.在一实施例中,编解码设计方法是基于bnf范式(backus-naur form)实现编解码规则的分析和解释。
122.bnf范式是种上下文无关文法(cfg,context-free grammar),它的语法结构为形如name::=expansion,其中:
123.name代表了非终止符(非终止,意味着它会进一步被其它内容替换/定义),使用尖括号表示,例如《non-terminal》;
124.::=表示“可替换为”或者“可定义为”,表示将用::=右侧内容替换/定义左侧的非终止符;
125.expansion是由非终止符和终止符(终止,表示该符号无需再被替换/定义)组成的表达式。
126.通过bnf范式多个语法规则间的组合和递归,进而实现了全部编解码规则的解释和分析。
127.本发明用于解释数据的bnf范式描述如下:
128.《spec》::=《elems》
129.《elems》::=《elem》+
130.《elem》::=《key》《def》《type》
131.《type》::=《word》|《struct》
132.《struct》::=《word》《def》《lbracket》《elems》《rbracket》
133.《key》::=《word》
134.《word》::="[a-za-z_0-9]+"
[0135]
《def》::=":"
[0136]
《lbracket》::="{"
[0137]
《rbracket》::="}"
[0138]
其中,《spec》、《elems》等均表示非终止符,“:”、"{"等表示终止符,"+"表示匹配前面的元素至少一次,“|”表示“或”的关系。例如,《elems》是由多个《elem》组成,《type》是由《
word》或者《struct》组成,《word》是表示字符串(由大小写字母、数字或者

_’组成),《struct》中嵌套了《elems》(实现递归)等等。
[0139]
通过本发明的解释方法可以:
[0140]
生成目标程序语言的结构体代码,编译后随版本发布,进而实现实时编解码,提升编解码效率;
[0141]
生成解释器,结合规则,实现对码流逐字节的解释和翻译。
[0142]
本发明还提供了一种数据交换编解码系统,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现如上述的数据交换编解码方法。
[0143]
处理器和存储器可以通过总线或者其他方式连接。
[0144]
存储器作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序以及非暂态性计算机可执行程序。此外,存储器可以包括高速随机存取存储器,还可以包括非暂态存储器,例如至少一个磁盘存储器件、闪存器件、或其他非暂态固态存储器件。在一些实施方式中,存储器可选包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至该处理器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
[0145]
需要说明的是,本实施例中的数据交换编解码系统,可以包括有业务处理模块、边缘端数据库、服务端版本信息寄存器、数据同步模块,处理器执行计算机程序时实现如上述应用在数据交换编解码系统的数据交换编解码方法。
[0146]
以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0147]
此外,本发明的一个实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令被一个处理器或控制器执行,例如,被上述终端实施例中的一个处理器执行,可使得上述处理器执行上述实施例中的数据交换编解码方法。
[0148]
本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统可以被实施为软件、固件、硬件及其适当的组合。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于ram、rom、eeprom、闪存或其他存储器技术、cd-rom、数字多功能盘(dvd)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。
[0149]
以上是对本发明的较佳实施进行了具体说明,但本发明并不局限于上述实施方
式,熟悉本领域的技术人员在不违背本发明精神的前提下还可作出种种的等同变形或替换,这些等同的变形或替换均包含在本发明权利要求所限定的范围内。
[0150]
以上所述本发明的具体实施方式,并不构成对本发明保护范围的限定。任何根据本发明的技术构思所做出的各种其他相应的改变与变形,均应包含在本发明权利要求的保护范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1