using System.Collections.Generic; using System.Linq; namespace FlyADBase { public static class ProtocolCommon { /// /// 第0个byte是 7E /// /// /// public static bool Pdu2Data(IEnumerable pdu, out List datas) { datas = new List(); for (int i = 1; i < pdu.Count(); i++) { byte p = pdu.ElementAt(i); if (p == 0x7D) { if (i + 1 < pdu.Count()) { i++; p = pdu.ElementAt(i); //转义符 if (p == 0x5E) { datas.Add(0x7E); } else if (p == 0x5D) { datas.Add(0x7D); } else { //异常,不能转义 return false; } } else { //异常,没有转义信息 return false; } } else { datas.Add(p); } } return true; } /// /// 第0个byte是 7E /// /// /// public static bool Data2Pdu(IEnumerable datas, out List pdu) { pdu = new List(); pdu.Add(0x7E); for (int i = 0; i < datas.Count(); i++) { byte b = datas.ElementAt(i); if (b == 0x7E) { pdu.Add(0x7D); pdu.Add(0x5E); } else if (b == 0x7D) { pdu.Add(0x7D); pdu.Add(0x5D); } else { pdu.Add(b); } } return true; } } }