标签:des style blog color 数据 for
这个算是我的一点小总结吧,放出来分享给大家,原来在网上找这种算法都找了N久没找到,自己写也是走了许多弯路,就放出来遛一遛吧
大家将就这个看看, 这是其中的一个主要的方法,其余的我就不放出来了,其中的IndexTag和endTag分别是首尾字节
1 public List<Gnss808RequesInfo> Filter(ref byte[] message) 2 { 3 var list = new List<Gnss808RequesInfo>(); 4 //是否退出循环 5 var isBreak = false; 6 while (true) 7 { 8 //如果缓冲区字节数组为空或者长度为小于1 9 if (isBreak || message == null) 10 { 11 break; 12 } 13 //首指针 14 var flag = -1; 15 for (var i = 0; i < message.Length; i++) 16 { 17 //判断首标识是否正确 18 if (i - flag == 1 && message[i] != IndexTag) 19 { 20 message = null; 21 LogHelper.Instance.Add("分包不正确,丢弃字节"); 22 break; 23 } 24 //如果是结束字符(且不为首字节,区分如果首标识和尾标识相同的情况) 25 if (i - flag != 1 && message[i] == EndTag) 26 { 27 var data = new byte[i - flag]; 28 Array.Copy(message, flag + 1, data, 0, i - flag); 29 //这个地方其实已经收到一个完整的数据包了 30 //下面的重载的方法生成规定的数据格式的接口 31 var request = Filter(data); 32 if (request != null) 33 { 34 list.Add(request); 35 } 36 flag = i; 37 } 38 //该为最后一个字节 39 if (i == message.Length - 1) 40 { 41 if (flag == i) 42 { 43 message = null; 44 } 45 else 46 { 47 //未接收完整的数据包 48 var data = new byte[message.Length - flag - 1]; 49 Array.Copy(message, flag + 1, data, 0, data.Length); 50 message = data; 51 // LogHelper.Instance.Add(string.Format("未知:{0}", CommonFunction.GetBcdCodeString(message, 0, message.Length))); 52 } 53 //退出循环 54 isBreak = true; 55 break; 56 } 57 } 58 } 59 return list; 60 }
根据首尾字节的tcp分包断包算法,布布扣,bubuko.com
标签:des style blog color 数据 for
原文地址:http://www.cnblogs.com/songjingsong/p/3837118.html