主要问题是我从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而停止:目标数组不够长......
我该怎么办?
答案 0 :(得分:1)
您可以只移动字节中的值以使它们匹配,然后将它们放在一起。如果我正确使用了位,那就是:
int value = (buf[0] << 2) | (buf[1] >> 6);