2012-05-03 12 views
0

におけるシリアルポートに符号付きバイトを書き込むことができ、私はシリアルポートに署名されたバイトを書き込むことができるようにする必要があり、その方法以外使用がどのようにVB

SerialPort.Write()メソッドは、唯一の[]バイト配列を取ります署名されていないバイトをシリアルポートに書き込む方法は?私は特定のコマンドに取り組んでいることは-1700から1700までの値をとる

については

おかげ

は、シリアル通信チャネルのみ、符号付きまたは符号なしの概念がありません

+1

符号付きまたは符号なしのバイトは、指定した値の範囲をサポートしていません。符号付きバイトは-127〜128を表し、符号なしバイトは0〜256を表します。 –

+0

申し訳ありません、この値を2つの別個のバイトに分割します – codingNightmares

答えて

0

を悪夢ワイヤー上の1と0の概念。送信側と受信側の両方の1と0に数値を割り当てるのは、お使いのオペレーティングシステム(と最終的にCPUアーキテクチャ)です。

状態の値の範囲は、(コメントと返信ごとに)1バイトで表すことはできません。あなたは、受信デバイスが特定の番号(他のデバイスbig endian or little endian?)を期待しているビットパターンを理解してから、適切なバイト[]のシーケンスを送信して、送信したい番号を表すことができます。

両方のデバイスが同じエンディアンを持っている場合は、セットアップのショートの配列は、このようなバイトの配列にコピーすることができます。

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

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

しかし、必ずと値の範囲のためにテストすること。特にエンベデッドデバイスを扱っている場合、数字のエンコーディングはインテルのPCとまったく同じではないかもしれません。

+0

このEricのおかげで、範囲のテストでは、入力された値がデバイス指定範囲内にあることを意味しますか? – codingNightmares

+0

テストアプリケーションから-1700を送信し、相手側のデバイスが-1700のように応答することを確認します。 1700と0を繰り返し、-127.1.128の正と負のテスト番号を使用して、数値エンコーディングが期待どおりに動作することを確認します。 –