C# 使用SerialPort.ReadByte优于ReadChar?

C# 使用SerialPort.ReadByte优于ReadChar?,c#,serial-port,c#-5.0,C#,Serial Port,C# 5.0,在我在线阅读的所有有关串行端口的示例代码中,所有代码都使用ReadByte,然后转换为Character,而不是首先使用ReadChar 这样做有好处吗?当你使用ReadChar时,它是基于你正在使用的编码,就像@Preston Guillot说的那样。根据以下文件: 此方法根据编码读取一个完整字符 同时使用和ReadChar时要小心。转换 在读取字节和读取字符之间,可能会导致额外的数据丢失 阅读和/或其他非预期行为。如果有必要切换 在从流读取文本和二进制数据之间,选择 仔细定义文本和二进制文件

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


这样做有好处吗?

当你使用ReadChar时,它是基于你正在使用的编码,就像@Preston Guillot说的那样。根据以下文件:

此方法根据编码读取一个完整字符

同时使用和ReadChar时要小心。转换 在读取字节和读取字符之间,可能会导致额外的数据丢失 阅读和/或其他非预期行为。如果有必要切换 在从流读取文本和二进制数据之间,选择 仔细定义文本和二进制文件之间边界的协议 数据,例如手动读取字节和解码数据


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

我对
SerialPort
还不太熟悉,因此无法确定,但我怀疑
ReadChar
可能无法根据字符编码读取单个字节。