Полученные пакеты сообщений содержат несколько сообщений, разделенных заголовком = 0xFD и нижним колонтитулом = 0xFE
// sample message packet with three
// different size messages
List<byte> receiveBuffer = new List<byte>();
receiveBuffer.AddRange(new byte[]
{ 0xFD, 1, 2, 0xFE,
0xFD, 1, 2, 3, 4, 5, 6, 7, 8, 0xFE,
0xFD, 33, 65, 25, 44, 0xFE});
// note: this sample code is without synchronization,
// statements, error handling...etc.
while (receiveBuffer.Count > 0)
{
var bytesInRange = receiveBuffer.TakeWhile(n => n != 0xFE);
foreach (var n in bytesInRange)
Console.WriteLine(n);
// process message..
// 1) remove bytes read from receive buffer
// 2) construct message object...
// 3) etc...
receiveBuffer.RemoveRange(0, bytesInRange.Count());
}
Как видите, (включая заголовок / нижний колонтитул) первое сообщение в этом пакете сообщений содержит 4 байта, а второе сообщение содержит 10 байтов, а третье сообщение содержит 6 байтов.
В цикле while я ожидал, что TakeWhile добавит байты, которые не равны нижней части сообщения.
Примечание: поскольку я удаляю байты после их чтения, всегда можно ожидать, что заголовок будет в позиции «0».
Я искал примеры для разделения байтовых массивов, но не продемонстрировал разбиение на массивы неизвестных и флуктуирующих размеров.
Любая помощь будет принята с благодарностью.
Большое спасибо!