Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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 cast it directly without involving byte arrays.

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
1.8k views
Welcome To Ask or Share your Answers For Others

1 Answer

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...