Casting an Integer to a Single, preserving bit representation

后端 未结 1 920
暗喜
暗喜 2020-12-21 15:27

Is there a fast way in VB.NET to take a 32-bit int and cast to a 32-bit float while preserving the underlying bit structure? BitConverter will do this, but I\'d like to cas

相关标签:
1条回答
  • 2020-12-21 15:53

    Damn, how could I possibly forget about The C-style Union?

    <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
    

    Well, how about writing a helper function in C# similar to one shown here:

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

    This can be compiled to a separate dll and referenced from the VB project.

    0 讨论(0)
提交回复
热议问题