シリアル ポート経由でバイトを送信する必要があり、C# クラスの SerialPort の利便性を利用してこれを行いたいと考えました。ただし、 ASCIIEncodingクラスのドキュメントから引用すると、このクラスを使用してシリアルポートを介して生のバイトを送信することには厳しい制限があるようです。
ASCIIEncoding は Windows コード ページ 20127 に対応しています。Encoding.ASCII プロパティまたは ASCIIEncoding コンストラクターによって返される既定のエンコーダーを使用する場合、その範囲外の文字は、エンコード操作が実行される前に疑問符 (?) に置き換えられます。
これは私が望むものではありません。バイト値が 0x7F より大きい場合は、疑問符としてエンコードするのではなく、その値として送信する必要があります。UTF-8 エンコーディングを使用すると、受信デバイスが予期しない文字のバイト数が増える可能性があるため、使用できません。SerialPort.Write メソッド (Char[], Int32, Int32)と (私の意見ではばかげている) SerialPort.Write メソッド (Byte[], Int32, Int32)の両方が、送信前にデータをエンコードします。
独自のEncoderFallbackクラスを作成できるようですが、私の理解では、「?」の代わりに使用する別の文字を指定することしかできません。それとも私はこれを仮定するのが間違っていますか?
SerialPort クラスを介して干渉されていないバイトを送信することはまったく可能ですか?