十六进制到浮点转换

时间:2011-10-26 13:15:48

标签: c#

我有一个4字节的十六进制数字:

08fdc941

它应该转换为浮点数:25.25,但我不知道如何?我用C#

从hex转换为float的正确方法是什么?

5 个答案:

答案 0 :(得分:6)

从MSDN上的this页面“如何:在十六进制字符串和数字类型之间转换(C#编程指南)”。

string hexString = "43480170";
uint num = uint.Parse(hexString, System.Globalization.NumberStyles.AllowHexSpecifier);

byte[] floatVals = BitConverter.GetBytes(num);
float f = BitConverter.ToSingle(floatVals, 0);
Console.WriteLine("float convert = {0}", f);

// Output: 200.0056     

答案 1 :(得分:5)

这样的事情:

        byte[] bytes = BitConverter.GetBytes(0x08fdc941);
        if (BitConverter.IsLittleEndian)
        {
            bytes = bytes.Reverse().ToArray();
        }
        float myFloat = BitConverter.ToSingle(bytes, 0);

答案 2 :(得分:2)

这会产生25.24855,这是我认为您正在寻找的。

var bytes = BitConverter.GetBytes(0x08fdc941);
Array.Reverse(bytes);
var result = BitConverter.ToSingle(bytes, 0);

答案 3 :(得分:0)

你确定这是正确的方法,因为BitConverter.ToSingle(BitConverter.GetBytes(0x08fdc941).Reverse().ToArray(), 0)已经接近了。

编辑:

顺便说一句,http://en.wikipedia.org/wiki/Single_precision_floating-point_format给出了ISO / IEC / IEEE 60559(IEEE 754)单精度浮点数如何工作的非常好的总结。

答案 4 :(得分:0)

string hexString = 08fdc941;
Int32 IntRep = Int32.Parse(hexString, NumberStyles.AllowHexSpecifier);
// Integer to Byte[] and presenting it for float conversion
float myFloat = BitConverter.ToSingle(BitConverter.GetBytes(IntRep), 0);
// There you go
return myFloat;

有关更多信息,请参见:

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/types/how-to-convert-between-hexadecimal-strings-and-numeric-types