2013-10-25 41 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一起使用时请小心。在读取字节和读取字符之间切换 可能会导致额外的数据被读取和/或其他意外行为。如果需要在读取文本和从流中读取二进制数据之间切换 ,请选择一个 协议,该协议仔细定义文本和二进制 数据之间的边界,例如手动读取字节并解码数据。