1

主な問題は、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... で停止します。

私に何ができる?

4

1 に答える 1

1

バイト内の値をシフトして一致させ、それらをまとめることができます。ビットを正しく使用すると、次のようになります。

int value = (buf[0] << 2) | (buf[1] >> 6);
于 2014-06-01T22:56:46.257 に答える