0

を使用して、署名付きバイトをシリアルポートに書き込むことができる必要があります

SerialPort.Write() メソッドは、メソッドが符号なしバイトの byte[] 配列のみを受け取ることを除いて、シリアルポートに符号付きバイトを書き込むにはどうすればよいですか?

私が特定のコマンドに取り組んでいるものについては、-1700 から 1700 までの値を取ります。

ありがとう

悪夢

4

1 に答える 1

0

シリアル通信チャネルには、符号付きまたは符号なしの概念はなく、ワイヤ上の 1 と 0 の概念のみがあります。送信側と受信側の両方で、これらの 1 と 0 に数値を割り当てるのはオペレーティング システム (および最終的には CPU アーキテクチャ) です。

あなたが述べた値の範囲は、バイトで表すことはできません(私のコメントとあなたの返信による)。受信デバイスが特定の数値に対してどのようなビット パターンを期待しているか (他のデバイスはビッグ エンディアンかリトル エンディアンか) を理解する必要があります。その後、適切なバイト [] シーケンスを送信して、送信する数値を表すことができます。

両方のデバイスのエンディアンが同じ場合、short の配列をセットアップしてから、次のように byte の配列にコピーできます。

short[] sdata = new short[] { 1, -1 };
byte[] bdata = new byte[sdata.Length * 2];

Buffer.BlockCopy(sdata, 0, bdata, 0, bdata.Length);

ただし、値の範囲を確認してテストしてください。特に組み込みデバイスを扱っている場合、数値エンコーディングは Intel PC とまったく同じではない可能性があります。

于 2012-05-03T16:31:19.900 に答える