У меня есть проблема с добавлением данных байтового массива в буфер списка<byte[]> с помощью цикла while
У меня есть поток байтов данных, который состоит из нескольких сообщений данных. Я читаю данные и использую государственную машину, чтобы разбить данные на отдельные сообщения. Каждое сообщение sepeate хранится в байтовом массиве bData[250]. Прежде чем перейти к декодированию следующего сообщения, я помещаю предыдущее декодированное сообщение в буфер списка " byte []", а затем повторно использую массив байтов bData для декодирования следующего сообщения и затем добавляю его в буфер списка.
Проблема, с которой я сталкиваюсь, заключается в том, что Buffer.Add() работает вне моего цикла while, но не в нем. Внутри цикла все элементы списка имеют те же данные, что и последний добавленный элемент.
Я разбил проблему на вызов простой функции, где я могу отобразить проблему, но, к сожалению, не решить ее! Ниже приведена моя простая функция тестирования/отладки:
byte[] requestToolDataMsg = new byte[] { 0x4B, 0x01, 0x00, 0x00, 0xB4 }; byte[] requestTest = new byte[] { 0x4B, 0x16, 0x00, 0x00, B4 }; byte[] clientTableReadMsg = new byte[] { 0x4B, 0x00, 0x27, 0x5A, 0x01, 0x02, 0x16, 0x04, 0x0A, 0x0B, 0x0C, 0x0D, 0x00, 0x00, 0xA5, 0x5A, 0x01, 0x02, 0x17, 0x05, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x00, 0x00, 0xA5, 0x5A, 0x01, 0x02, 0x18, 0x06, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x00, 0xA5, 0xB4 }; static List<byte[]> buffer = new List<byte[]>(); private void UdateList() { byte[] bData = new byte[256]; int kk = 0; buffer.Add(requestToolDataMsg); buffer.Add(clientTableReadMsg); buffer.Clear(); while (kk < 3) { kk++; requestToolDataMsg[0] = (byte)kk; buffer.Add(requestToolDataMsg); } }
Вне буфера цикла while.Add() работает. В первый раз внутри цикла while добавляются правильные данные, но во второй раз через цикл данные верны для второго элемента, но они также перезаписывают первый элемент. После третьего раза через цикл все 3 элемента имеют значение третьего элемента.
то есть я получаю:
0x03, 0x01, 0x00, 0x00, 0xB4 0x03, 0x01, 0x00, 0x00, 0xB4 0x03, 0x01, 0x00, 0x00, 0xB4
вместо:
0x01, 0x01, 0x00, 0x00, 0xB4 0x02, 0x01, 0x00, 0x00, 0xB4 0x03, 0x01, 0x00, 0x00, 0xB4
Что я уже пробовал:
Я пытался определить список буферов "байт []" внутри функции и вне функции, но это не помогает (хватаясь за соломинку здесь. Я получаю ту же проблему с целочисленными списками, но работает, если я использую списки строковых массивов