Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#:将ushort转换为float_C#_.net_Casting - Fatal编程技术网

C#:将ushort转换为float

C#:将ushort转换为float,c#,.net,casting,C#,.net,Casting,从我正在使用的库中,我收到了一个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 ==

从我正在使用的库中,我收到了一个
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)
ushort[]缓冲区={0xBF80,0x0000};
浮点f=(uint)缓冲区[0]f==-1(0xBF800000)
//有效结果=>f==3.21283686E+9(0x4F3F8000)
有什么建议吗?

看看这门课

特别是,该方法获取字节序列并将其转换为浮点

 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#union是正确的

使用C#union:


您需要使用
System.BitConverter
,并将短路转换为字节


我想看看System.BitConverter类。您可以使用BitConverter.GetBytes将UShort转换为字节数组,然后组合字节数组并使用BitConverter将字节数组转换为浮点

你应该用这个类来做这个

使用将两个ushort转换为字节数组,连接两个数组,并使用将结果数组中的4个字节转换为浮点。

固定大小数组的C#语法为
固定ushort缓冲区[2],我不确定这是否与
[FieldOffset]
配合使用。不能使用普通的C#数组,因为这样会将指针转换为数组,而不是数组内容。
 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 );