主な問題は、SerialPort から 10 ビットしか使用されていない 2 進数を受信するため、これを使用して完全なデータを受信することです。
byte[] buf = new byte[2];
serialPort.Read(buf, 0, buf.Length);
BitArray bits = new BitArray(buf);
バイナリを int に変換する元のアイデアは次のとおりです。
foreach (bool b in bits)
{
if(b){
binary += "1";
}
else{
binary+= "0";
}
}
decimal = Convert.ToInt32(binary, 2);
decimal = decimal >> 6;
バイナリは明らかに文字列です。これは機能しますが、これで試した以前のコードの代わりに、別のソリューションが存在するかどうかを知る必要があります。
decimal = BitConverter.ToInt16(buf, 0);
しかし、これは最初の 8 ビットしか読み取れないため、残りの 2 ビットが欠落している必要があります。ToInt16 を ToInt32 に変更した場合
decimal = BitConverter.ToInt32(buf, 0);
プログラムは System.ArgumentException: Destination array was not long enough... で停止します。
私に何ができる?