串列埠資料解析通用方法
// Listening = true;////設定標記,說明我已經開始處理資料,一會兒要使用系統UI的。
isReceive = true;
//將資料新增到快取區
buffer.AddRange(receiveByte);
List<int> indexList = new List<int>();//儲存包頭包尾位置
for (int i = 0; i < buffer.Count; i++)
{
//如果發現包頭獲取包尾就記錄
if (buffer[i] == 0x7E)
{
indexList.Add(i);
}
}
//儲存接收資料包中包含的完整包
List<byte[]> bufferList = new List<byte[]>();
if (indexList.Count >= 2)
{
//按位置擷取資料包
for (int x = 0; x < indexList.Count; x++)
{
List<byte> list = new List<byte>();
if ((x + 1) < indexList.Count)
{
for (int y = indexList[x]; y <= indexList[x + 1]; y++)
{
list.Add(buffer[y]);
}
bufferList.Add(list.ToArray());
}
}
}
//解析資料包
for (int j = 0; j < bufferList.Count; j++)
{
//解析
}
}
//解析完成後移除緩衝區原資料
for (int h = 0; h < indexList.Count; h++)
{
if ((h + 1) < indexList.Count)
{
buffer.RemoveRange(indexList[h], indexList[h + 1] + 1);
}
}
//判斷剩餘緩衝區是否還包含有包頭或包尾,如果都不包含,直接清除緩衝區
for (int g = 0; g < buffer.Count; g++)
{
if (buffer[g] == 0x7E)
{
}
else
{
buffer.Clear();
}
}
Console.WriteLine();
#endregion