如何在C#中将3个字节转换为24位数?

我有一个字节数组,我从消息的标题部分读取。 这些字节包含消息的长度。 从不超过3个字节,它们从LSB到MSB排序。 因此在下面的示例中,39是LSB,2是MSB。

var data = new byte[] { 39, 213, 2 }; 

在上面的例子中,我如何获取这些字节并转换为数字(int,short等)?

 var num = data[0] + (data[1] << 8) + (data[2] << 16); 

使用像BitConverter.ToInt32这样的方法,但要意识到32位数量需要4个字节。

 var data = new byte[] {39, 213, 2, 0}; int integer = BitConverter.ToInt32(data, 0); 

还有其他方法可以转换为其他类型,如Single和Double 。

使用左移运算符和or运算符:

 int d = (data[2] << 16) | (data[1] << 8) | data[0] 

显然,你可以在这里做各种各样的事情,比如使用循环等:)

像这样的东西应该工作:

 data[0] + 256*data[1] + 256*256*data[2] 

您的编译器应该将其优化为“正确”位操作。

BitConverter为您处理字节序,这就是为什么它要走的路。

虽然你需要4个字节,但是

 BitConverter.ToInt32(new byte[1] { 0 }.Concat(yourThreeByteArray).ToArray());