问题是:
串口收到数据时,其处理是这样的(以例子来演示,假设收到了12 34 56 00 02 AB CD其中黑体加粗的“00 02”是要拿出来做处理的,黑体加粗的“AB CD”是这整个接收字符串的CRC16校验结果)
       处理过程如下:
          1,SubString截取其除了最后两位(CRC)的其余子字符串(此处为12 34 56 00 02),将该子字符串通过自己写在C#里面的CRC16函数进行校验(CRC16源程序中已有),将校验的结果与“收到的字符串最后2位(此处为AB CD)”进行比较:如果一样,则说明收到的数据CRC通过,可以处理;如果不一样,则说明收到的数据CRC不通过,可能是杂波信号,放丢掉不予处理;
          2,在CRC通过的基础上,将子字符串(12 34 56 00 02)的“00 02”拿出来;
          3,将“00 02”(十六进制字符串)转为“0000 0000 0000 0010”(二进制字符串);
          4,开始判断(得到的二进制字符串0000 0000 0000 0010):
                1’最后一个(最右边)二进制位为1:则......(比如条件1为true,否则为flase);
                2’倒数第二个(右边第二个)二进制位为1:则......(比如条件2为true,否则为flase);
                3’等等等等……(还可以判断很多,不过都是一样的方法)          如果要达到这样的结果,怎么去编写相关的代码呢???字符串处理不会?
          就是在串口接收函数DataReceive下怎么写呢?
          请教一下,C#的字符串操作不会!
          尽量给代码最好了!
          谢谢!

解决方案 »

  1.   

    你的思路不是蛮清晰的么,还有什么问题?至于你说的判断问题,可以利用异或操作来判断是否你要的值的。比如你说的 00 02 你可以用Ox0002与你截取到的待判断数据求异或,如果结果为0,说明倒数第二位是1,否则为0。其他的类似。另外,你说的那个CRC,收到数据之后只要把整个数据进行CRC计算,判断结果是否为0就可以了,不用每次截取数据位去计算然后再比较
      

  2.   

    呵呵
    我是晚上来看帖子的;
    谢谢 nvshenxp的热心回复
    我自己已经解决了这个问题
    谢谢