我一直在将我的应用程序的某些部分从C ++转换为C#。有这个编码/解码部分,我需要读取一个变量作为浮点数,定义为uint:
uint result = 0;
... // a value is set to result
return (*((float *)&result)); // get result as a float value
无论如何将最后一行转换为C#?谢谢大家..
答案 0 :(得分:6)
您可以使用不安全的代码执行此操作 - 或者您可以使用BitConverter.GetBytes()
将值转换为字节数组,然后使用BitConverter.ToSingle()
进行转换。显然效率较低,但是如果您处于不能使用不安全代码的情况下,它会起作用。
[StructLayout(LayoutKind.Explicit)]
struct Int32SingleUnion
{
[FieldOffset(0)]
int i;
[FieldOffset(0)]
float f;
internal Int32SingleUnion(int i)
{
this.f = 0; // Just to keep the compiler happy
this.i = i;
}
internal Int32SingleUnion(float f)
{
this.i = 0; // Just to keep the compiler happy
this.f = f;
}
internal int AsInt32
{
get { return i; }
}
internal float AsSingle
{
get { return f; }
}
}
(当然,你可以做同样的事情。)
答案 1 :(得分:4)
您可以使用BitConverter。例如,
return BitConverter.ToSingle(BitConverter.GetBytes(result), 0);
答案 2 :(得分:2)
两个选项:
1)使用C#指针。如果在项目属性中启用“不安全代码”,编译器将允许您。请在此处阅读更多内容:http://msdn.microsoft.com/en-us/library/y31yhkeb(v=VS.100).aspx
2)使用BitConverter类。具体来说,BitConverter.GetBytes()将您的uint转换为字节,然后将BitConverter.ToSingle()转换为float。请在此处阅读:http://msdn.microsoft.com/en-us/library/system.bitconverter.aspx
祝你好运!答案 3 :(得分:0)
BitConverter
班是你的朋友。
http://msdn.microsoft.com/en-us/library/system.bitconverter.aspx