从我正在工作的图书馆我收到了一系列的ushort.
我希望将它们转换为以下数组float:第一个ushort代表第一个的16个MSB,float第二个代表第一个ushort的16个LSB float,依此类推.
我尝试使用类似下面的内容,但是值被转换为整数的值,而不是原始位:
ushort[] buffer = { 0xBF80, 0x0000 };
float f = (uint)buffer[0] << 16 | buffer[1];
// expected result => f == -1 (0xBF800000)
// effective result => f == 3.21283686E+9 (0x4F3F8000)
Run Code Online (Sandbox Code Playgroud)
有什么建议吗?
Mik*_*scu 10
特别是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 );
Run Code Online (Sandbox Code Playgroud)
编辑
在这个例子中,我颠倒了MSB/LSB顺序..现在它是正确的