C# 数据解析

valeb 2012-05-05 10:41:47
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开始的一条数据包中的数据解析出来,请问如何做???
...全文
225 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yufei_yuxuan 2012-05-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
对于处理这种协议问题的,构造状态机来解决是再合适不过的了。
[/Quote]

状态机是什么?
valeb 2012-05-05
  • 打赏
  • 举报
回复
对于刚的帖子,可能还没有清楚让理解,现在我在补充下


当外部设备传回来数据时(不停的传)。我们就先对这些数据解析,解析时:先从数据发回来的缓冲区中获取一条数据包。(找到 5个FF(包头)开头后跟7个字节。如果多于7个这条数据包就不要),将5个FF后的第一到第六个转换成二进制,第七个是校验。现在我怎样在这些缓冲区中去解析所有的数据
threenewbee 2012-05-05
  • 打赏
  • 举报
回复
对于处理这种协议问题的,构造状态机来解决是再合适不过的了。
bdmh 2012-05-05
  • 打赏
  • 举报
回复
如果是byte[]或数据流,就遍历,取连续5个字节是否等于你的FF,然后找到第二个后,去第一个位置和第二个位置间的内容

如果是字符,就用正则
yufei_yuxuan 2012-05-05
  • 打赏
  • 举报
回复
用正则吧,找到接收区中与5个FF配置的位置,然后根据得到的位置的索引号,把中间的字串都取出来
orochiheart 2012-05-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
如果是byte[]或数据流,就遍历,取连续5个字节是否等于你的FF,然后找到第二个后,去第一个位置和第二个位置间的内容

如果是字符,就用正则
[/Quote]
+1

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧