我有一個字符串類型的4字節十六進制代碼,需要轉換爲符合IEEE 754 Single-Precision floating-point format的浮點數。如何將十六進制字符串轉換爲單精度浮點數
我認爲Java有一個庫可以輕鬆完成此操作,但我不確定C#是否有一個。解決這個問題的最好方法是什麼?
我有一個字符串類型的4字節十六進制代碼,需要轉換爲符合IEEE 754 Single-Precision floating-point format的浮點數。如何將十六進制字符串轉換爲單精度浮點數
我認爲Java有一個庫可以輕鬆完成此操作,但我不確定C#是否有一個。解決這個問題的最好方法是什麼?
因爲它聽起來就像你從一個十六進制字符串開始:
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[]
開始,那麼你可以跳過前幾個步驟。
raw = BitConverter.GetBytes(int.Parse(hex,System.Globalization.NumberStyles.HexNumber))是一個快捷方式。 –
@HansPassant嗯......真的夠了,我想。實際上,在這一點上,我會試圖將'int'從'int'轉換爲'float'; p –
@HansPassant實際上,您提出了一個有趣的觀點,因爲'int.Parse'使用不同的排序我如何擴展它。已更新以顯示兩者。對於OP:對於不安全翻轉的厚顏無恥的例子(假設顯示** second **'Convert'用法):'int num = int.Parse(hex,System.Globalization.NumberStyles.HexNumber); float f = *((float *)&num);' –
轉換爲字節數組。 BitConverter –
@RameshDurai:爲什麼BitConverter.ToInt32會有用? ['BitConverter.ToSingle'](http://msdn.microsoft.com/en-us/library/system.bitconverter.tosingle),當然。 –
@Jon Skeet:Agreed.BitConverter.ToSingle很有幫助。對不起,錯誤的答案。 –