2012-08-28 123 views
2

我有一個字符串類型的4字節十六進制代碼,需要轉換爲符合IEEE 754 Single-Precision floating-point format的浮點數。如何將十六進制字符串轉換爲單精度浮點數

我認爲Java有一個庫可以輕鬆完成此操作,但我不確定C#是否有一個。解決這個問題的最好方法是什麼?

+3

轉換爲字節數組。 BitConverter –

+1

@RameshDurai:爲什麼BitConverter.ToInt32會有用? ['BitConverter.ToSingle'](http://msdn.microsoft.com/en-us/library/system.bitconverter.tosingle),當然。 –

+0

@Jon Skeet:Agreed.BitConverter.ToSingle很有幫助。對不起,錯誤的答案。 –

回答

5

因爲它聽起來就像你從一個十六進制字符串開始:

string hex = "0a0b0c0d"; 
byte[] raw = new byte[hex.Length/2]; 
for (int i = 0; i < raw.Length; i++) 
{ 
    // THEN DEPENDING ON ENDIANNESS 
    raw[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16); 
    // OR 
    raw[raw.Length - i - 1] = Convert.ToByte(hex.Substring(i * 2, 2), 16); 
} 
float f = BitConverter.ToSingle(raw, 0); 

如果你實際上是從byte[]開始,那麼你可以跳過前幾個步驟。

+0

raw = BitConverter.GetBytes(int.Parse(hex,System.Globalization.NumberStyles.HexNumber))是一個快捷方式。 –

+0

@HansPassant嗯......真的夠了,我想。實際上,在這一點上,我會試圖將'int'從'int'轉換爲'float'; p –

+0

@HansPassant實際上,您提出了一個有趣的觀點,因爲'int.Parse'使用不同的排序我如何擴展它。已更新以顯示兩者。對於OP:對於不安全翻轉的厚顏無恥的例子(假設顯示** second **'Convert'用法):'int num = int.Parse(hex,System.Globalization.NumberStyles.HexNumber); float f = *((float *)&num);' –

相關問題