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 );