日期:2014-05-17  浏览次数:21381 次

C# 解析串口协议
开始“{” + 数据长度 + 数据内容 + 回应命令(1未通过,0为不通过) +校验位+结尾”}“

请问如何解析这条命令,要将回应命令取出来

拜托各位了!急求!!!!!!!
c#?串口?协议解析

------解决方案--------------------
能详细点么?
------解决方案--------------------
一步一步的拆包,先拆{},再根据 数据长度,找到  回应命令(1未通过,0为不通过) 在字符串内的位置,如果需要校验的,先比对校验值。
------解决方案--------------------
不好意写错了
应该是

 /// <summary>
        /// 
        /// </summary>
        /// <param name="bytes">整个协议的字节</param>
        /// <returns></returns>
        byte getBackCmd(byte[] bytes)
        {
            //假如‘}’占2个字节
            var endlnlen = 2;
            //假如结束检验位占2个字节
            var checkendlen = 2;
            //回应命令假如占1个字节
            var backcmdlen = 1;

            var ret = bytes.Skip(bytes.Length - 2 - 2 - 1).Take(1);
            return ret.FirstOrDefault();

        }
调用:

 var ret = getBackCmd();
            if (ret == 1)
            { }

            else
            { 
            
            }
------解决方案--------------------
串口命令里还包含 "}" ???  神一样的协议.
------解决方案--------------------
既然使用这个协议,为什么不使用 JSON 呢 ?
------解决方案--------------------
1、你接收过来的数据长度是不是固定长度?如果是固定的,那你就把不是的舍弃
2、固定长度,开始“{”(一个字节) + 数据长度(两个个字节) + 数据内容(每次发送600个字节,最后后不满按实际发送)----这部分的长度是不是一定的?
3、如果上面长度是固定的,那是不是可以取回来的数据截取你想要的部分? 就是回应命令,我们做串口的数据采集,基本上返回命令长度是固定的,开头+结尾是固定的,你串口返回的数据,先判断头尾截取到正确的数据区域,再在正确的数据区域,截取你要的固定位置的数据就行了,比如是10-13位数,你明白了?
bytes.Skip(bytes.Length - 2 - 2 - 1).Take(1);
这样判断合适吗?