是SerialPort的文档.Write(byte[], int, int)误导
本文关键字:int 误导 byte SerialPort 文档 Write | 更新日期: 2023-09-27 18:01:43
我问这个,以防我一直在使用SerialPort.Write()不正确。我很确定我没有,但你永远不会知道……
SerialPort的文档。写(byte[], int, int)状态:
默认情况下,SerialPort使用ASCIIEncoding对字符进行编码。ASCIIEncoding将所有大于127的字符编码为(char)63或' ? '。若要支持该范围内的其他字符,请将Encoding设置为UTF8Encoding, UTF32Encoding,或UnicodeEncoding
这与SerialPort. write (string)和SerialPort文档中的注释相同。写(char[], int, int).
这样已经很多年了,但我以前从来没有真正注意过。我一直很高兴地使用SerialPort.Write(byte[], int, int)
发送值高于0x7f的二进制数据。我觉得很奇怪,关于发送字节数组的文档正在讨论字符。
是我的问题,还是那里的文档有点问题?
文档肯定是错误的。如果你反编译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);
是的,这是误导。(不确定你还想从答案中得到什么。