为什么我不能用BitConverter将byte [2]数组转换为int?

时间:2014-06-01 22:46:27

标签: c# binary int bytearray bitconverter

主要问题是我从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;

二进制显然是一个字符串,有效,但我需要知道是否存在另一个解决方案,而不是我尝试使用此前的代码:

decimal = BitConverter.ToInt16(buf, 0);

但是这只读了前8位,我需要丢失其他2位!如果我为ToInt32更改ToInt16

decimal = BitConverter.ToInt32(buf, 0);

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

我该怎么办?

1 个答案:

答案 0 :(得分:1)

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

int value = (buf[0] << 2) | (buf[1] >> 6);