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 に答える