您的位置:首页 > 编程语言 > C语言/C++

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

2016-04-01 09:13 751 查看
java:

</pre><pre name="code" class="java">int i = Float.intBitsToFloat(132.0232f); //1124337136
float 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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java c语言 c#