是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的二进制数据。我觉得很奇怪,关于发送字节数组的文档正在讨论字符。

是我的问题,还是那里的文档有点问题?

是SerialPort的文档.Write(byte[], int, int)误导

文档肯定是错误的。如果你反编译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);

是的,这是误导。(不确定你还想从答案中得到什么。