2014-01-30 388 views
2

我试过了下面的C#代码,将十六进制文字转换为浮点数,并得到正确的结果。我希望输入一个字节数组,并将其转换为浮点数,但似乎无法得到正确的结果。Byte Array to Float Conversion C#

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; 
} 

任何帮助将不胜感激。谢谢!

+0

8字节单? –

+0

@JamesBarrass:他正在转换4个字节,而不是8:#42,#29,#ec和#00。 –

+0

@RoyDictus:“类似于...... 0x01,0x04,0x01,0x60,0x00,0x02,0x70,0x29' –

回答

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; 
    } 
+0

非常感谢 – kelevra88

2

浮子Single)是4字节值;

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

x86 CPU的使用逆转字节(小端)的顺序,所以正确的字节阵列是

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); 
+0

谢谢,总是很高兴听到有人寻求帮助 – kelevra88

+0

@ Maria88我们都在寻求帮助,我们只是需要一些更多的信息您问的问题不清楚 –

+0

非常抱歉,如果我生气你,只是寻找一些帮助,下次会更加清楚,非常抱歉,任何人都可以帮助扭转字节数组中的字节,是否有简单的一行转换? – kelevra88