将整数转换为单个保留位表示

时间:2011-06-24 21:35:08

标签: vb.net casting

VB.NET中是否有一种快速的方法可以采用32位int并转换为32位浮点数,同时保留基础位结构? BitConverter会这样做,但我想直接转换它而不涉及字节数组。

1 个答案:

答案 0 :(得分:2)

该死的,我怎么可能忘记C风格的联盟?

<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Explicit)> _
Public Structure IntFloatUnion
    <Runtime.InteropServices.FieldOffset(0)> Public i As Integer
    <Runtime.InteropServices.FieldOffset(0)> Public f As Single
End Structure


Sub Main()
    Dim u As IntFloatUnion

    u.i = 42
    Console.WriteLine(u.f)

    Console.ReadLine()
End Sub

那么,在C#中编写一个类似于here所示的辅助函数:

public static class FancyConverter
{
    public static unsafe float FloatFromBytes(int i)
    {
        return *((float*)(void*)(&i));
    }
}

这可以编译为单独的dll并从VB项目中引用。