Я использую System.IO.Ports.SerialPort для чтения данных из последовательной связи. Проблема в том, что я хочу определить, какой байт плох, когда я читаю буфер байтового массива и записываю файл. Если я знаю, какой байт плохой, тогда я могу воссоздать правильный файл, так как я знаю хэш файла. Но похоже, что System.IO.Ports.SerialPort только позволяет «перезаписать» ошибочный байт с помощью свойства SerialPort.ParityReplace. Если я читаю массив байтов в миллион, то я не хочу устанавливать битовый шаблон в качестве значения замены, а затем искать этот битовый шаблон в массиве, так как у меня может быть много совпадений. Есть ли способ для меня, чтобы определить, какой байт не прошел проверку четности, когда я читаю буфер байтов? Если нет, то что было бы для меня лучшим способом обнаружения ошибок в стиле четности при отправке файла через последовательный порт?
Приведенный ниже код показывает, как я сейчас смотрю на последовательные данные, но я открыт для других методов, если они быстрее или дают больше надежности.
//... earlier code:
_serialPort.ReadBufferSize = 100000000;
//... more irrelevant code
Thread.Sleep(150000); // wait for 150 seconds for the data to come in.
byte[] HundredKBBuffer = new byte[_serialPort.ReadBufferSize]; // the byte array I'll read from
//read data then discard buffer to get new data from the transmitting machine
_serialPort.Read(HundredKBBuffer, 0, HundredKBBuffer.Length);
_serialPort.DiscardInBuffer();
Console.WriteLine("data received");
//code that reads the byte array, looks for header and trailer and writes file
findHeadAndWriteDataToFile(HundredKBBuffer);