我问这个,以防我错误地使用SerialPort.Write()。我很确定我没有,但你永远不知道......
SerialPort.Write(byte[], int, int)州的文档:
默认情况下,SerialPort使用ASCIIEncoding对字符进行编码。 ASCIIEncoding将所有大于127的字符编码为(char)63或 '?'。要支持该范围内的其他字符,请将“编码”设置为 UTF8Encoding,UTF32Encoding或UnicodeEncoding。
这与SerialPort.Write(string)和SerialPort.Write(char[], int, int)的文档中的评论相同。
多年来一直如此,但我以前从未真正注意到它。我总是高兴地使用SerialPort.Write(byte[], int, int)
发送值大于0x7f的二进制数据。我觉得奇怪的是,发送字节数组的东西的文档是在讨论字符。
只是我,或者那里的文件有点不对劲吗?
答案 0 :(得分:3)
文档肯定是错误的。如果你反编译Write(char[], int, int)
,你会看到
byte[] bytes = this.Encoding.GetBytes(buffer, offset, count);
this.Write(bytes, 0, bytes.Length); // This is the Write(byte[], int, int) method
Write(byte[], int, int)
方法只包含:
this.internalSerialStream.Write(buffer, offset, count, this.writeTimeout);
很明显,此方法中没有ASCII编码。
答案 1 :(得分:2)
是的,那是误导。 (不确定你还能从答案中得到什么。这真的是一个问题吗?)