C#:将ushort转换为float

前端之家收集整理的这篇文章主要介绍了C#:将ushort转换为float前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
从我正在使用的图书馆我收到了一系列的ushort.

我想在float数组中转换它们:第一个ushort表示第一个float的16个MSB,第二个ushort是第一个float的16个LSB,依此类推.

我尝试使用类似下面的内容,但是值被转换为整数的值,而不是原始位:

ushort[] buffer = { 0xBF80,0x0000 };
float f = (uint)buffer[0] << 16 | buffer[1];
// expected result  => f == -1            (0xBF800000)
// effective result => f == 3.21283686E+9 (0x4F3F8000)

有什么建议吗?

解决方法

看看 System.BitConverter课程.

特别是,ToSingle方法采用一系列字节并将它们转换为浮点数.

ushort[] buffer = {0xBF80,0x0000};
 byte[] bytes = new byte[4];
 bytes[0] = (byte)(buffer[1] & 0xFF);
 bytes[1] = (byte)(buffer[1] >> 8);
 bytes[2] = (byte)(buffer[0] & 0xFF);
 bytes[3] = (byte)(buffer[0] >> 8);
 float value = BitConverter.ToSingle( bytes,0 );

编辑在这个例子中,我已经颠倒了MSB / LSB顺序..现在它是正确的

猜你在找的C#相关文章