110,534
社区成员
发帖
与我相关
我的任务
分享
string errorCode = null;
string input = "(02,02,01,04,00)";
//var s = input.Trim(); // 在解析数据之前,最好能够保持接收数据的完整性,出现多余字符可以认为错误
try
{
if (input.Length != 16)
errorCode += "接收数据长度错误"; // 保证接收到的数据是符合协议字符长度的
else
{
if (!input.StartsWith("(") || !input.EndsWith(")"))
throw new Exception("数据的开始或者结束符号格式错误。");
var mid = input.Substring(1, input.Length - 2);
var datas = mid.Split(',');
if (datas.Length != 5)
errorCode += "数据格式错误\n";
int LiftNumber = int.Parse(datas[0]); // 这里用根据实际情况设置
if (LiftNumber < 2/*"最小电梯编号"*/ || LiftNumber > 4/*"最大电梯编号"*/) // 保证不会出现电梯编号数据超范围
errorCode += "电梯号错误\n";
int FloorNumber = int.Parse(datas[1]); // 这里用根据实际情况设置
if (FloorNumber < 5/*"最小楼层编号"*/ || FloorNumber > 12/*"最大楼层编号"*/) // 保证不会出现楼层编号数据超范围
errorCode += "楼层号错误\n";
int Direction = int.Parse(datas[2]);
if (Direction != 1 && Direction != 0) // 保证不会出现方向标志错误
errorCode += "方向标志错误\n";
int DoorStatus = int.Parse(datas[3]); // 这里用根据实际情况设置
if (DoorStatus != 0x01/*"开门状态标志"*/ && DoorStatus > 0x02/*"关门状态标志"*/) // 保证不会出现状态标志错误
errorCode += "门状态标志错误\n";
int LiftStatus = int.Parse(datas[4]);
}
}
catch
{
errorCode += "解析数据错误\n";
}
if (errorCode == null)
errorCode = "数据解析完毕";
MessageBox.Show(errorCode);
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string input = "(02,02,01,04,00)";
var s = input.Trim();
if (!s.StartsWith("(") || !s.EndsWith(")"))
throw new Exception("数据的开始或者结束符号格式错误。");
var mid = s.Substring(1, s.Length - 2);
var datas = mid.Split(',');
Console.WriteLine("f1={0}, f2={1}, f3={2}, f4={3}, f5={4}", datas[0], datas[1], datas[2], datas[3], datas[4]);
Console.ReadKey();
}
}
}
string errorCode;
byte[] buffer;
int bytes = socket.Receive(buffer);
if (bytes != 7)
errorCode = "非法数据";
for (int i = 0; i < 7; i++)
{
switch (i)
{
case 0:
if (buffer[i] == '(')
MessageBox.Show("开始标志正确");
else
errorCode = "开始标志错误";
break;
case 1:
if (buffer[i] >= "最小电梯编号" && buffer[i] <= "最大电梯编号")
MessageBox.Show("电梯号:" + i.ToString());
else
errorCode = "电梯号错误";
break;
case 2:
if (buffer[i] >= "最低楼层号" && buffer[i] <= "最高楼层号")
MessageBox.Show("楼层号:" + i.ToString());
else
errorCode = "楼层号错误";
break;
//.....// 自己补齐吧
default:
errorCode = "解析过程错误";
break;
}
}