2013-10-25 40 views
2

在我已經在線閱讀的有關SerialPorts的所有示例代碼中,都使用ReadByte,然後轉換爲Character,而不是首先使用ReadChar。通過ReadChar使用SerialPort.ReadByte的優勢?

這樣做有沒有優勢?

+1

我對'SerialPort'知之甚少,但我懷疑'ReadChar'可能不會根據字符編碼讀取單個字節。 –

回答

3

SerialPort.Encoding屬性經常被誤解。默認是ASCIIEncoding,它會產生?對於字節值0x80..0xFF。所以他們不喜歡得到這些問號。如果你看到這樣的代碼,然後直接將字節轉換爲字符,那麼他們得到的確是錯誤的,Unicode在該字節範圍內有很多unprintable codepoints,並且設備實際上發送這些字符的機率爲零。字符串往往被認爲比字節[]容易處理,它是。

3

當你使用ReadChar時,它基於你使用的編碼,就像@Preston Guillot所說的那樣。根據文件ReadChar

該方法讀取基於編碼的一個完整字符。

ReadByte和ReadChar一起使用時請小心。在讀取字節和讀取字符之間切換 可能會導致額外的數據被讀取和/或其他意外行爲。如果需要在讀取文本和從流中讀取二進制數據之間切換 ,請選擇一個 協議,該協議仔細定義文本和二進制 數據之間的邊界,例如手動讀取字節並解碼數據。