Вы преобразуете число в строку, так что, скажем, когда nChar
равно 2, выводом будет строка "2"
, а когда nChar
= 49, выводом будет "49"
.
Итак, сообщение начинается с {STX}1
. {STX}
- это управляющий код ASCII 2, а 1
- это код 49 ASCII. Таким образом, «неправильные данные» начинаются с "249"
.
Таким образом, данные не ошибочны, и код делаетименно то, что вы сказали, за исключением того, что ваш коллега не имел в виду то, что вы хотели:)
Вместо преобразования ASCII-кодов в строки, конвертируйте их в символы, а также используйте строитель строк, чтобы минимизировать количество разразмер строки изменяется.
StringBuilder message(ComPort.BytesToRead);
while (ComPort.BytesToRead > 0)
{
message.Append((char)ComPort.ReadChar());
}
return message.ToString();
Но вам не нужно ничего делать! SerialPort.ReadExisting
делает то, что вы хотите:
return ComPort.ReadExisting();
.
Стилистическое примечание: C # не является Java, и засорение кода с помощью this.
не является идиоматическим и не необходимым. Не делайте этого, если нет веской причины.