3

在我在线阅读的有关 SerialPorts 的所有示例代码中,所有示例代码都使用 ReadByte 然后转换为 Character 而不是首先使用 ReadChar。

这样做有优势吗?

4

2 回答 2

3

当您使用 ReadChar 时,它基于您使用的编码,就像@Preston Guillot 说的那样。根据ReadChar的文档:

该方法根据编码读取一个完整的字符。

一起使用ReadByte和 ReadChar 时要小心。在读取字节和读取字符之间切换可能会导致读取额外数据和/或其他意外行为。如果需要在读取文本和从流中读取二进制数据之间切换,请选择仔细定义文本和二进制数据边界的协议,例如手动读取字节和解码数据。

于 2013-10-25T06:15:31.427 回答
3

SerialPort.Encoding 属性经常被误解。默认是 ASCIIEncoding,它会产生 ? 对于字节值 0x80..0xFF。所以他们不喜欢得到这些问号。如果您看到这样的代码,然后直接将字节转换为 char,那么他们就大错特错了,Unicode 在该字节范围内有很多不可打印的代码点,并且设备实际发送这些字符的几率为零。字符串往往被认为比 byte[] 更容易处理,它是。

于 2013-10-25T06:48:59.527 回答