当前位置:编程学习 > C#/ASP.NET >>

C# 数据解析

FF FF FF FF FF 0C 01 00 00 09 52 56  一条数据
协议:


    开始  设备地址     卡类型及状态 卡号 数据 校验
------------------------------------------------------------------------------------
字节数       5     1        1           2  2    1
-------------------------------------------------------------------------------------
温湿度标签                     一条数据 (如上面所说的一条数据)
---------------------------------------------------------------------------------------


缓冲区接收到的数据
FF  FF  FF  FF  FF  0C  01  00  00  09  52  56  00  00  00  00  00  00  00  00  00  00  00  00  FF  FF  FF  FF  FF  0C  01  00  00  09  52  56  FF  FF  FF  FF  FF  0C  01  00  00  00  00  00  00  00  00  00  FF  FF  FF  FF  FF  0C  01  00  00  09  52  56  FF  FF  FF  FF  FF  0C  01  00  00  09  52  56  00  00  00  00  FF  FF  FF  FF  FF  0C  01  00  00  09  52  56  FF  FF  FF  FF  FF  0C  01  00  00  09  52  56  FF  FF  FF  FF  FF  0C  01  00  00  00  00  00  00  00  00  00  FF  FF  FF  FF  FF  0C  01  00  00  09  52  56  FF  FF  FF  FF  FF  0C  01  00  00  09  52  56  


在缓冲区接收到的数据如上:5个FF表示包头(开始),OC表示外界设备的地址,

现在我想把5个FF开始的一条数据包中的数据解析出来,请问如何做??? --------------------编程问答-------------------- 用正则吧,找到接收区中与5个FF配置的位置,然后根据得到的位置的索引号,把中间的字串都取出来 --------------------编程问答-------------------- 如果是byte[]或数据流,就遍历,取连续5个字节是否等于你的FF,然后找到第二个后,去第一个位置和第二个位置间的内容

如果是字符,就用正则 --------------------编程问答-------------------- 对于处理这种协议问题的,构造状态机来解决是再合适不过的了。 --------------------编程问答-------------------- 对于刚的帖子,可能还没有清楚让理解,现在我在补充下


当外部设备传回来数据时(不停的传)。我们就先对这些数据解析,解析时:先从数据发回来的缓冲区中获取一条数据包。(找到 5个FF(包头)开头后跟7个字节。如果多于7个这条数据包就不要),将5个FF后的第一到第六个转换成二进制,第七个是校验。现在我怎样在这些缓冲区中去解析所有的数据 --------------------编程问答--------------------
引用 2 楼  的回复:
如果是byte[]或数据流,就遍历,取连续5个字节是否等于你的FF,然后找到第二个后,去第一个位置和第二个位置间的内容

如果是字符,就用正则

+1 --------------------编程问答--------------------
引用 3 楼  的回复:
对于处理这种协议问题的,构造状态机来解决是再合适不过的了。


状态机是什么?
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,