Convert int bits to float bits

前端 未结 6 1260
醉话见心
醉话见心 2020-12-04 02:50

I\'m in the process of creating a buffer that will read/write in a banner in which I can completely eradicate the problems that comes with TCP-Segmentation. The only problem

相关标签:
6条回答
  • 2020-12-04 03:14

    using the System.Runtime.CompilerServices.Unsafe nuget package

    Unsafe.As<float, int>(ref value);
    

    Will convert a float to an int

    and

    Unsafe.As<int, float>(ref value);
    

    will convert an int to a float

    0 讨论(0)
  • 2020-12-04 03:16

    Vexingly, if you were using double and long, there is BitConverter.DoubleToInt64Bits and BitConverter.Int64BitsToDouble. I have genuinely no idea why there aren't Single / Int32 equivalents, as it forces you to create a pointless byte[] on the heap (it doesn't even let you pass in a pre-existing buffer).

    If you are happy to use unsafe code, you can actually do it all in a simply data thunk, without any method calls or arrays:

    public static unsafe int SingleToInt32Bits(float value) {
        return *(int*)(&value);
    }
    public static unsafe float Int32BitsToSingle(int value) {
        return *(float*)(&value);
    }
    
    0 讨论(0)
  • 2020-12-04 03:21

    The keyword float is an alias for the data type System.Single.

    You can use the BitConverter.ToSingle to convert four bytes into a float.

    0 讨论(0)
  • 2020-12-04 03:25

    Targeting .NET Core we are now finally able to simply use BitConverter.SingleToInt32Bits() and BitConverter.Int32BitsToSingle()!

    0 讨论(0)
  • 2020-12-04 03:27

    Use the BitConverter.ToSingle method:

    int i = ...;
    float f = BitConverter.ToSingle(BitConverter.GetBytes(i), 0);
    
    0 讨论(0)
  • 2020-12-04 03:27

    BitConverter creates some overhead and unnecessary buffer. This solution is almost as fast as unsafe conversion:

    [StructLayout(LayoutKind.Explicit)]
    struct FloatToInt 
    {
        [FieldOffset(0)]private float f;
        [FieldOffset(0)]private int i;
        private static FloatToInt inst = new FloatToInt();
        public static int Convert(float value)
        {
            inst.f = value;
            return t.i;
        }
    }
    
    0 讨论(0)
提交回复
热议问题