在go语言中,自带Float64bits,源代码
func Float64bits(f float64) uint64 { return *(*uint64)(unsafe.Pointer(&f)) }
实质上是把8个字节的float64改成uint64类型,有别于C#中的Convert.ToUint64(double),后者是进行的值转换,例如:
Convert.ToUint64(0.9) 返回1,而按位转换结果是4606281698874543309。
c#中也允许使用指针,通过指针可以实现Float64bits:
public static ulong Float64bits(double v)
{
unsafe
{
return *(ulong*)(&v);
}
}
也可以反过来:
public static double Float64frombits(ulong v)
{
unsafe
{
return *(double*)&v;
}
}
当然,还有不用指针的办法,不过性能比较差:
public static ulong Float64bits(double v)
{
return BitConverter.ToUInt64(BitConverter.GetBytes(v), 0);
}
public static double Float64frombits(ulong v)
{
return BitConverter.ToDouble(BitConverter.GetBytes(v), 0);
}