自定义二进制结构化协议数据的发送和接收方法_3

文档序号:9690781阅读:来源:国知局
将得到的多个元素转换后的数据内容依次排列,得到该数组、结构体或容器的数据内容单元。
[0026]图2示出了一个数据段中的数据是基本数据类型时,其数据长度的判断过程:首先的步骤是读取所述第一存储区域中的一个数据段;当取得一个数据段后,判断该数据段是否为基本数据类型,如是,执行基本数据转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据。具体来讲,判断该数据段是否为基本数据类型,如步骤S201中所示,读取该数据段中的指定位置,得到其中数据的数据类型并判断是否为基本数据类型。如是,执行步骤S202,判断该数据段中数据的有效值为零否,如是,执行步骤S212,得到其数据长度为零,对数据描述单元中的数据类型做出第一类标记,并去掉该数据段的数据内容单元,得到该数据段的第一格式数据;也就是上述数据描述部分已经能够表示其数据值;如否,执行步骤S203,判断该数据的有效值取反加I是否仍为其本身,如是,执行步骤S213,得到其数据长度为零,对数据描述单元中的数据类型做出第二类标记,并去掉该数据段的数据内容单元,得到该数据段的第一格式数据;如否,执行步骤S204,取得上述有效值的绝对值,将其与设定的数0x7f比较,判断其是否小于0x7f,如是,执行步骤S214得到其第一格式数据中的数据长度为I字节;如否,则执行步骤S205,将该绝对值与设定的数0x7ff比较,判断其是否小于0x7fT,如是,则执行步骤S215,得到其第一格式数据中的数据长度为2字节,如否,执行步骤S206等等,以此类推,步骤S207、步骤S208、步骤S209和步骤S210中,都是将上述绝对值与设定的数值比较,不同的是这些数值逐步加大,直到步骤S210中0x7fffffff,每一步骤中,如果该绝对值小于比较的数字,则分别执行步骤S216、步骤S217、步骤S218、步骤S219或步骤S220,分别得到该数据段中的数据长度为3、4、5、6或7个字节,如果步骤S210中,该绝对值不小与上述0x7ffTfTfT,则执行步骤S211,得到其数据长度为8个字Tl O
[0027]在本实施例中,上面的描述给出了在数据段为基本数据时,其长度的取得方式,数据长度决定后,取得原始数据中的有效数据即得到转换后的第一格式数据中的数据内容,该有效数据就是原始数据中能够产生作用的数据,例如,一个二进制数前面的零就不能产生作用,因此可以去掉。
[0028]如果在上述步骤中判断该数据段中不是基本数据,则判断该数据段是否为数组或结构体对象,如是,执行数组或结构体对象转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据;如否,进一步判断所述数据段是否为容器类型数据,如是,执行数组或结构体对象转换,依次排列得到的数据描述单元和数据内容单元,得到该数据段的第一格式数据;如否,则判断当前数据段为字符串,依次排列取得的数据描述单元和原始数据中的字符串部分,得到该数据段的第一格式数据。
[0029]上述涉及数据类型的判断都是通过读取二进制结构数据中的指定位置的数值,再与表示各种类型的数值比较而得到当前数据段中的数据类型的。总体上来讲,当一个数据段中的数据是基本数据类型时,所述数据内容单元的长度通过对原始数据中的有效数据计算而得,所述数据内容单元中的数据是所述原始数据中的有效数据;当一个数据段中的数据是数组或结构体类型时,其数据描述单元包括一个字节的数据类型描述部分和长度变化的数据长度描述部分;所述数据长度描述部分通过对该数据段中组成该数组或结构体的所有基本数据长度求和而得;当一个数据段中的数据是容器类数据时,其数据描述单元包括一个字节的数据类型描述部分、一个字节的容器对象类型描述部分和长度变化的数据长度描述部分;所述容器对象类型描述部分通过读取该数据段中原始数据的指定位置而得;所述数据长度描述部分通过对该数据段中组成该容器的所有基本数据长度求和而得。
[0030]如图3所示,在本实施例中,形成一个数据包的第一识别码的具体步骤包括:
步骤S31按照顺序取得多个第一格式数据的数据类型描述单元:在本步骤中,分别通过读取选择的多个第一格式数据的数据描述单元,得到每个第一格式数据的数据类型。通常来讲是按照第一格式数据的顺序来读取其数据描述单元的,所以得到的数据类型也是具有顺序的。这个顺序实际上表示了这些第一格式数据在缓存中的排列顺序,其数量就是缓存中(本次读取或本数据包中)的第一格式数据的数量。
[0031]步骤S32按照顺序逐个查找数据类型:在本实施例中,第一格式数据的数据类型可以有多种,例如,基本数据或数组等等;同样地,在形成数据包时,其包括的第一格式数据的个数也可以有多个,事先设定在每种情况下,均只有一个唯一的数对应,在本步骤中就是在事先设置的内容中找到对应的数,该数就是第一识别码。一种最简单的情况下,例如,第一格式的数据类型包括基本数据和数组,此时,数据包中包括一个基本数据用I表示,包括一个数组用2表示,包括一个基本数据后面跟随一个数组用3表示,包括一个数组后面跟随一个基本数据用4表示,包括两个基本数据用5表示,包括两个数组用6表示等等。总之,是在事先设定的内容中查找,不仅与数据类型相关,也会其顺序、数量相关。该事先设定的内容可能是一个表格,也可能是一个类似树状的检索装置等等。
[0032]步骤S33得到该数据包的第一识别码:在本步骤中,得到该数据包的第一识别码,将其放入数据包的包头中。
[0033]在本实施例中,还涉及一种接收使用上述方法发送数据的方法。图4示出了这种接收方法的具体步骤:
步骤S41接收数据包,取得其包头中的第一识别码:在本步骤中,接收传来的数据包,取得其包头中表示本数据包中第一格式数据的排列顺序及数据类型的第一识别码。在本实施例中,通过读出数据包头中指定位置的内容,就能够得到上述第一识别码。
[0034]步骤S42查找该第一识别码:在本步骤中,在事先设定的内容(通常是一个对照表)中查找上述得到的第一识别码。
[0035]步骤S43查到该第一识别码否,如是,执行下一步骤;否则,跳转到步骤S46;
步骤S44得到该第一识别码表示的多个第一格式数据包的数据类型和顺序:在本实施例中,如果能够在事先设定的内容中查找到上述第一识别码,则能够得到该第一识别码表示的具体内容,也就是该数据包中包括多少个第一格式数据,这些第一格式数据的数据类型分别是什么,这些相同或不同数据类型的第一格式数据的顺序如何。因此,在本步骤中,就是依据上述第一识别码得到上述这些内容。
[0036]步骤S45逐个处理该数据包中的第一格式数据:在本步骤中,逐个取出上述数据包中包括的第一格式数据,按照其数据类型分别对其进行处理,使得其数据转换为原始数据,同时,按照得到的顺序存储在这些得到的原始数据,以便接收数据者能够使用这些数据。具体来讲,就是取得一个第一格式数据的数据类型单元后,依据其数据类型,按照对应的数据类型处理该第一格式数据中的数据内容部分,将其转换为原始数据。此处,采用上述将各种不同数据类型的数据转换为第一格式数据的过程的逆过程,来使得该第一格式数据转换为与其数据类型对应的原始数据的。在本步骤中,对于多个第一格式数据的处理是按照其在数据包中排列的顺序依次进行的。同样地,在接收过程中,上述数据类型包括基本数据类型、数组或结构体对象、容器类型数据或字符串。
[0037]步骤S46抛弃该数据包:在本步骤中,由于不能识别数据包中的第一识别码,所以认为该数据包中的数据不能处理,抛弃该数据包。
[0038
当前第3页1 2 3 4 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1