1

我问这个以防我错误地使用 SerialPort.Write()。我很确定我没有,但你永远不知道...

SerialPort.Write(byte[], int, int)的文档指出:

默认情况下,SerialPort 使用 ASCIIEncoding 对字符进行编码。ASCIIEncoding 将所有大于 127 的字符编码为 (char)63 或 '?'。要支持该范围内的其他字符,请将 Encoding 设置为 UTF8Encoding、UTF32Encoding 或 UnicodeEncoding。

这与SerialPort.Write(string)SerialPort.Write(char[], int, int)文档中的注释相同。

多年来一直如此,但我以前从未真正注意到它。我一直很乐意SerialPort.Write(byte[], int, int)发送值高于 0x7f 的二进制数据。我觉得奇怪的是,发送字节数组的文档正在谈论字符。

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

4

2 回答 2

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 编码。

于 2013-02-28T09:42:05.527 回答
2

是的,这是误导。(不确定您还想从答案中得到什么。这真的是一个问题吗?)

于 2013-02-28T09:29:06.717 回答