1

主要问题是我从 SerialPort 接收到一个仅使用 10 位的二进制数,所以我用它来接收完整的数据:

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;

binary 显然是一个字符串,它可以工作,但我需要知道是否存在另一个解决方案,而不是我尝试使用的 previuos 代码:

decimal = BitConverter.ToInt16(buf, 0);

但这仅读取前 8 位,我需要缺少其他 2 位!如果我将 ToInt16 更改为 ToInt32

decimal = BitConverter.ToInt32(buf, 0);

程序因 System.ArgumentException 停止:目标数组不够长...

我能做些什么?

4

1 回答 1

1

您可以移动字节中的值以使它们匹配,然后将它们放在一起。如果我正确使用了位,那将是:

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