【紧急求助】状态机,数据包判断 ,byte

lijun_net 2010-11-24 10:10:47
我要发送一个数据包,
格式是这样的(byte[])
00 01 FE 02 FD 18 02 ........ FE FF
这是做通讯的, 想必都知道吧,

我现在要做一个验证,
其中 byte[1]+byte[2]=FF
byte[3]+byte[4]=FF
最后一位也是FF

这样的3个判断, 如果都满足则 把这个byte【】数组放在队列中

这些字节是从txt文件中一个字节一个字节读取的

得用到状态机这种判断吧, 只有满足上面一个条件, 才开启下面的判断

byte[] buf = new byte[128];
int byte_count = 0;
bool packet_started = false;

int goNext = 0;
byte data;

//bool goNext = false;
int i = Convert.ToInt32(obj);
while (true)
{


SerialPort serialport = listStationInfo[i].Rs232;


data = (byte)serialport.ReadByte();

#region MyRegion

switch (goNext)
{
case 0:
if (data == 00)
goNext = 1;
break;


case 1:
buf[byte_count++] = data;
goNext = 2;
break;


case 2: MessageBox.Show(buf[1].ToString() + " " + buf[2].ToString());
if (Convert.ToInt32(buf[1].ToString()) + Convert.ToInt32(buf[2].ToString()) == 255)
goNext = 3;
else
{
goNext = 0;

}break;


case 3: if (Convert.ToInt32(buf[1].ToString()) + Convert.ToInt32(buf[2].ToString()) == 255)
goNext = 4;
else
{
goNext = 0;

}break;


case 4: process_packet(buf, i);
goNext = 0;
break;
//default: break;
}
#endregion


该怎么判断呢?

尤其是 那2个byte相加等于FF的, 我在那过不去了,不知道该怎么写条件


大晚上的, 希望看到的各位高手都帮帮忙, 谢谢了, 小弟急死了

...全文
129 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lijun_net 2010-11-24
  • 打赏
  • 举报
回复
楼上的名字比我多个字
wolftop 2010-11-24
  • 打赏
  • 举报
回复
不需要状态机。 将每种状态的处理写成独立函数。 将这些函数代理存入一个数组。用状态码做索引。逻辑会比较简单。当然也方便做成事件模型

111,129

社区成员

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

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

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