C++(union), C#(伪union)实现 Java的Float.intBitsToFloat()方法

来源:互联网 发布:美女图片源码带采集 编辑:程序博客网 时间:2024/06/16 06:43
java:
</pre><pre name="code" class="java">int i = Float.intBitsToFloat(132.0232f); //1124337136float f = Float.floatToRawIntBits(i); //132.0232

c++:

inline float intBitsToFloat(int i){    union    {        int i;        float f;    } u;    u.i = i;    return u.f;}inline int floatToRawIntBits(float f){    union    {    int i;    float f;    } u;    u.f = f;    return u.i;}


C#

public static float intBitsToFloat(int v)        {            byte[] buf = BitConverter.GetBytes(v);            return BitConverter.ToSingle(buf, 0);        }        public static int floatToRawIntBits(float v)        {            byte[] buf = BitConverter.GetBytes(v);            return BitConverter.ToInt32(buf, 0);        }

C# 虽然没有union,可以自己来实现,挺有意思。

[StructLayout(LayoutKind.Explicit, Size = 8)]        public struct Float        {            [FieldOffset(0)]            int i;            [FieldOffset(0)]            float f;            public static int floatToRawIntBits(float f)            {                Float u;                u.i = 0;                u.f = f;                return u.i;            }            public static float intBitsToFloat(int i)            {                Float u;                u.f = 0;                u.i = i;                return u.f;            }        };using System.Runtime.InteropServices;



0 0
原创粉丝点击