C#: преобразование ushort в float
из библиотеки, с которой я работаю, я получаю массив 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)
какие будут предложения?
5 ответов
вы должны использовать метода bitconverter класс для этого.
преобразуйте два ushorts в байтовые массивы с помощью метода bitconverter.Метод Getbytes(Типа Uint16), объедините два массива и используйте метода bitconverter.ToSingle (byte[] value,int startIndex) чтобы преобразовать 4 байта в результирующем массиве в float.
Я бы посмотрел на систему.Класс BitConverter. Вы можете использовать BitConverter.GetBytes превратит ваши ushorts в байтовые массивы, затем объедините байтовые массивы и используйте BitConverter, чтобы превратить байтовый массив в float.
используйте соединение C#:
[System.Runtime.InteropServices.StructLayout(LayoutKind.Explicit)]
public struct FloatUShortUnion {
[System.Runtime.InteropServices.FieldOffset(0)]
float floatValue;
[System.Runtime.InteropServices.FieldOffset(0)]
ushort short1;
[System.Runtime.InteropServices.FieldOffset(16)]
ushort short2;
}
вам нужно будет использовать System.BitConverter
, и преобразовать шорты в байтах.
http://msdn.microsoft.com/en-us/library/system.bitconverter.tosingle.aspx