を使用して、署名付きバイトをシリアルポートに書き込むことができる必要があります
SerialPort.Write() メソッドは、メソッドが符号なしバイトの byte[] 配列のみを受け取ることを除いて、シリアルポートに符号付きバイトを書き込むにはどうすればよいですか?
私が特定のコマンドに取り組んでいるものについては、-1700 から 1700 までの値を取ります。
ありがとう
悪夢
を使用して、署名付きバイトをシリアルポートに書き込むことができる必要があります
SerialPort.Write() メソッドは、メソッドが符号なしバイトの byte[] 配列のみを受け取ることを除いて、シリアルポートに符号付きバイトを書き込むにはどうすればよいですか?
私が特定のコマンドに取り組んでいるものについては、-1700 から 1700 までの値を取ります。
ありがとう
悪夢
シリアル通信チャネルには、符号付きまたは符号なしの概念はなく、ワイヤ上の 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 とまったく同じではない可能性があります。