vb2005进行数组比较
深呼吸 2008-05-22 11:44:48 大家好,我现在做的一个程序,用来接收单片机发送的命令,通讯协议的描述如下,[]内为类型描述,每行为一条命令,通过比对每一行内所有的[cmd]类型数据,可以唯一确定此命令,[data]和[check]为变量,不做为判断依据.
FF[cmd] -- [data] 00[cmd] 08[cmd] -- [data] -- [data] -- [check]
FF[cmd] -- [data] 00[cmd] 10[cmd] -- [data] -- [data] -- [check]
FF[cmd] -- [data] 00[cmd] 04[cmd] -- [data] -- [data] -- [check]
FF[cmd] -- [data] 00[cmd] 02[cmd] -- [data] -- [data] -- [check]
FF[cmd] -- [data] 00[cmd] 0C[cmd] -- [data] -- [data] -- [check]
FF[cmd] -- [data] 00[cmd] 14[cmd] -- [data] -- [data] -- [check]
FF[cmd] -- [data] 00[cmd] 0A[cmd] -- [data] -- [data] -- [check]
FF[cmd] -- [data] 00[cmd] 12[cmd] -- [data] -- [data] -- [check]
FF[cmd] -- [data] 00[cmd] 80[cmd] 00[cmd] 00[cmd] -- [check]
FF[cmd] -- [data] 10[cmd] 00[cmd] 00[cmd] 00[cmd] -- [check]
FF[cmd] -- [data] 00[cmd] 20[cmd] 00[cmd] 00[cmd] -- [check]
FF[cmd] -- [data] 00[cmd] 40[cmd] 00[cmd] 00[cmd] -- [check]
FF[cmd] -- [data] 02[cmd] 00[cmd] 00[cmd] 00[cmd] -- [check]
......
在实际接受时的数据可能如下(16进制数组):
FF 01 00 08 00 00 09
FF 01 00 08 00 15 1E
FF 01 00 08 00 27 30
FF 01 00 08 00 36 3F
FF 01 00 08 00 3F 48
FF 01 00 0C 04 3F 50
FF 01 00 0C 18 3F 64
FF 01 00 0C 24 3C 6D
FF 01 00 0C 2D 30 6A
FF 01 00 0C 3F 1E 6A
FF 01 00 0C 3F 0C 58
FF 01 00 04 3F 00 44
FF 01 00 14 3F 12 66
FF 01 00 14 3F 36 8A
FF 01 00 14 3F 3F 93
FF 01 00 14 2A 3F 7E
FF 01 00 14 15 3F 69
FF 01 00 14 00 3F 54
FF 01 00 10 00 3F 50
FF 01 00 10 00 39 4A
FF 01 00 10 00 1E 2F
FF 01 00 00 00 00 01
......
我现在的做法,是将通讯协议硬编码进程序,然后对接收到的数据进行判断,从而分辨出接收到的是什么命令.但是由于要兼容多家协议,全部硬编码不方便不科学,所以现在采用配置文件的方式,来读取通讯协议,并根据配置文件的描述,来对接收到的数据进行判断.
在如何比对接收到的数据和通讯协议时,遇到了问题,如上面描述的那样,我希望能通过读取配置文件,生成一个静态表或者说是一组存在于内存中的变量,然后在每次数据接收后,通过与之相比较,即可判断出是什么命令.但是如何可以做到比较通讯协议中类型为cmd的字节呢?而且如果用循环方式,势必要遍历数组中的每个元素,而通讯协议中的命令很多,采用循环比较是否效率会很低?
能否有一种方式,类似一张对比表(将通讯协议的命令列成表,并将cmd类型标为匹配),接收到的数据当作一个纸条,这样将这个纸条从上往下移动,和表中某一行需要匹配的项目完全吻合即可得到判断?
我现在希望能实现这种比较的方法,但是不知道该如何实现,希望得到大家的帮助!谢谢!