2014-01-30 435 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