1

シリアル ポート経由でバイトを送信する必要があり、C# クラスの SerialPort の利便性を利用してこれを行いたいと考えました。ただし、 ASCIIEncodingクラスのドキュメントから引用すると、このクラスを使用してシリアルポートを介して生のバイトを送信することには厳しい制限があるようです。

ASCIIEncoding は Windows コード ページ 20127 に対応しています。Encoding.ASCII プロパティまたは ASCIIEncoding コンストラクターによって返される既定のエンコーダーを使用する場合、その範囲外の文字は、エンコード操作が実行される前に疑問符 (?) に置き換えられます。

これは私が望むものではありません。バイト値が 0x7F より大きい場合は、疑問符としてエンコードするのではなく、その値として送信する必要があります。UTF-8 エンコーディングを使用すると、受信デバイスが予期しない文字のバイト数が増える可能性があるため、使用できません。SerialPort.Write メソッド (Char[], Int32, Int32)と (私の意見ではばかげている) SerialPort.Write メソッド (Byte[], Int32, Int32)の両方が、送信前にデータをエンコードします。

独自のEncoderFallbackクラスを作成できるようですが、私の理解では、「?」の代わりに使用する別の文字を指定することしかできません。それとも私はこれを仮定するのが間違っていますか?

SerialPort クラスを介して干渉されていないバイトを送信することはまったく可能ですか?

4

1 に答える 1

3

byte[]オーバーロードページにコメントがあります:

ASCIIEncodingおよび他のタイプのエンコーディングに関する注意は、このオーバーロードには適用されません。このオーバーロードは、エンコーディングをバイパスしてバイト配列を使用します。

(これらのエンコーディングの注釈は、Writeの他のオーバーロードからコピー/貼り付けされたようです。これらのオーバーロード(文字配列と文字列を使用)は、エンコーディングを使用します)。

— Micah Copple(おそらくユーザーmjcopple-レピュテーションを「転送」できるはずです!)

于 2012-05-29T10:39:24.997 に答える