2013-12-17 3 views
1

В классе .NET SerialPort метод ReadExisting() возвращает String вместо массива байтов. Это кажется странным выбором, учитывая, что RS232 обычно используется для перемещения значений 7 или 8 бит, которые могут или не могут быть печатаемыми символами. Есть ли причина для этого выбора?В .NET почему SerialPort.ReadExisting() возвращает строку вместо массива байтов?

В настоящее время я в конечном итоге использую System.Text.Encoding.GetBytes(recvd_data) для преобразования String в массив байтов. Есть ли более эффективный метод?

+0

Это выглядит как удобный метод, потому что есть также 'Read' метод, который читает в' Char [] '. –

+0

Свойство BaseStream - это путь, см. Http://www.sparxeng.com/blog/software/must-use-net-system-io-ports-serialport –

ответ

3

Я использовал SerialPort экстенсивно и лучшим способом, который я нашел для чтения серии байтов, делает несколько звонков на ReadByte(). Да, вы читаете по одному байту за раз, но я обнаружил, что его простота устраняет проблемы.

В лучшем случае этот метод избавит вас от необходимости конвертировать (поскольку вы будете читать в массив байтов).

+0

Видите ли вы какого-либо повышения производительности от этого метода? Serial довольно медленный, поэтому я предполагаю, что его ограничивающий фактор ... –

+0

@JesseCraig На самом деле я не замечаю никаких проблем с производительностью, и я прочитал много данных из последовательного порта. В вашем случае может быть полезно проверить оба этих метода и посмотреть, какой из них лучше работает в вашем сценарии. – gleng

+0

@JesseCraig Как прошло? Вы находили, что это помогло вам? – gleng

Смежные вопросы