2016-04-18 9 views
0

に送信します。文字列を分割し、シリアルポートに値をバイトとして送信しようとしています。文字列をバイトに変換してシリアルポート

私はいくつかの解決策と例を見つけましたが、私の値で動作させることができます。

これは私が試みているコードですが、問題は255がエラーを生成するようです。私はいくつかのことを試してみましたが、これを理解しているようです。

活性化イベント時間継続スレッド 例外:例外スロー:「System.OverflowException」がmscorlib.dllで(「値が大きすぎるか、または符号なしバイトのためには小さすぎるのいずれかでした。」)。例外がスローされる:「System.OverflowExceptionを」のMscorlib.dll(「値が大きすぎるか、または符号なしバイトには小さすぎるのいずれかであった。」)8.67s [9972]ワーカースレッドに16進数で

SerialPort _SP; 
_SP = SerialConnect(SelectedPort, 9600); 


string str = "0xFE 0xD0 0x255 0x0 0x0"; 

byte[] bytes = str.Split(' ').Select(s => Convert.ToByte(s, 16)).ToArray(); 

_SP.Write(bytes, 0, bytes.Length); 

答えて

2

0x255は、に等しいです。小数点では597であり、1バイトには大きすぎます。 おそらく16進数0xFFを探しています。これは10進数で255に等しくなります。 これを自分で理解する方法を知りたい場合は、16進数で読むことをお勧めします。

  • 床(16分の255^1)= 15(F)
  • 255から15×16 = 15
  • 床(16分の15^0)= 15(F)

は、したがって、0xFFを、また、エンディアンあなたが作業しているのに注意してください。 https://en.wikipedia.org/wiki/Endianness

+1

ありがとうございます、私はそれを試して与える必要があります。私はこの[guide](https://learn.adafruit.com/usb-plus-serial-backpack/command-reference)に従っており、 "0xFE 0xD0 0x255 0x0 0x0"として送信する値をリストしています – justinf

+0

技術的なことを読むときに注意する必要があることを知ってください。時々、これらのことを書いている人は、タイプミスをします。また、数値ベースの違いを理解できないこともあります。 – Jakotheshadows

0

を参照してくださいには、以下のコードを修正:

var bytes = new byte[] { 0xFE, 0xD0, 0xFF, 0x0, 0x0 }; 
var port = SerialConnect(SelectedPort, 9600); 
port.Write(bytes, 0, bytes.Length); 

あなたは本当に必要な6バイト(0x255がエラーでない)場合:あなたは2バイトで保持することができます

var bytes = new byte[] { 0xFE, 0xD0, 0x2, 0x55, 0x0, 0x0 }; 
var port = SerialConnect(SelectedPort, 9600); 
port.Write(bytes, 0, bytes.Length); 
0

こんにちは最大進値が0xFFのは、あなたがに0x255を変換しようとすると、例外を取得理由のthatsれます16進数

関連する問題