字节数组到浮点转换C#

时间:2014-01-30 10:41:16

标签: c# floating-point hex bytearray

我已尝试使用以下C#代码将 hex literal转换为浮点并获得正确的结果。我希望输入一个字节数组,并将其转换为浮点数,但似乎无法得到正确的结果。

0x4229ec00是当前格式。我需要byte array格式的东西... ...

new byte[]{ 0x01, 0x04, 0x01, 0x60, 0x00, 0x02, 0x70, 0x29}; //current output 42.48

代码如下:

byte[] bytes = BitConverter.GetBytes(0x4229ec00);
float myFloat = floatConversion(bytes);

public float floatConversion(byte[] bytes)
{
    float myFloat = BitConverter.ToSingle(bytes, 0);
    return myFloat;
}

非常感谢任何帮助。谢谢!

2 个答案:

答案 0 :(得分:4)

您可以修改浮动转换功能,如下所示

    public float floatConversion(byte[] bytes)
    {
        if (BitConverter.IsLittleEndian)
        {
            Array.Reverse(bytes); // Convert big endian to little endian
        }
        float myFloat = BitConverter.ToSingle(bytes, 0);
        return myFloat;
    }

答案 1 :(得分:2)

float Single)是 4 Byte 值;

您的测试值 0x4229ec00 包含4个字节,它们是: 0x42,0x29,0xEC,0x00

x86 CPU使用反向顺序字节( Little Endian ),因此右字节数组是

0x00, 0xEC, 0x29, 0x42

守则

// Original array
Byte[] data = new Byte[] {0x42, 0x29, 0xEC, 0x00};
// 42.48047
// If CPU uses Little Endian, we should reverse the data 
float result = BitConverter.ToSingle(BitConverter.IsLittleEndian? data.Reverse().ToArray() : data, 0);