我一直在将应用程序的某些部分从C++转换为C#。有一个编码/解码部分,我需要将其读取为定义为uint的float变量:

uint result = 0;

... // a value is set to result

return (*((float *)&result)); // get result as a float value

无论如何将最后一行转换为C#?谢谢你们..

最佳答案

您可以使用不安全的代码来执行此操作,也可以使用BitConverter.GetBytes()将值转换为字节数组,然后使用BitConverter.ToSingle()转换回。显然,这效率较低,但是如果您无法使用不安全的代码,则可以使用。

编辑:还有我在MiscUtil中使用过的另一种选择,使用类似C的“联合”来工作得更像您的原始示例,但是通过自定义结构:

[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; }
    }
}

(当然,您可以做同样的事情很长时间,而且要翻倍。)

关于c# - 相当于C#(将变量读取为其他类型),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5139910/

10-09 21:40