2017-02-23 125 views
1

考慮以下變量:轉換浮到十六進制格式

float myFloat = 0xC0451EB8; 

如何獲得C0451EB8從myFloat?

編輯:不知道爲什麼我在這裏投票沒有評論。我不問一個浮點或uint32的簡單十六進制表示。我可以做這個。鑑於上述變量定義和的[可能的共同]答:

string FloatAsHex(float myFloat) { 
    return BitConverter.ToString(BitConverter.GetBytes(myFloat)); 
} 

FloatToHex(0xC0451EB8); //will output 1F-45-40-4F, not what I expect 
FloatToHex(BitConverter.ToSingle(BitConverter.GetBytes(0xC0451EB8))) //works 

雖然第二個明顯的作品,我只能訪問到浮點型變量。

+0

你的意思是一個字符串? –

+0

是的,作爲一個字符串或字節[] - 我只是想扭轉轉換。 – nullable

+1

您可以嘗試使用'.ToString(「x」)',但這可能需要強制轉換爲double或int –

回答

1

有沒有辦法來完成你的要求。您的代碼將存儲整數值0xC0451EB8或十進制3225755320,存儲在類型爲float的變量中。該整數值具有32位的精度,但float不能表示32位的數字精度,因爲float值的32位中的一些被提交給指數。

因此,整數值3225755320被截斷爲3225755392

,就可以把floatuint,然後使用標準機制格式化爲十六進制字符串值。例如。 ((uint)myFloat).ToString("X")。但是當你這樣做時,你將從截斷值開始,輸出將是"C0451F00"(或者如果在格式字符串中包含標準十六進制說明符前綴,則爲"0xC0451F00")。

截斷原始值後,無法恢復它。你不能逆轉這個過程。

+0

感謝彼得,毫不奇怪,我甚至沒有嘗試簡單的轉換爲無符號整數,然後得到格式化的字符串。這現在工作。也感謝您的詳細解釋,非常感謝。 – nullable

0

文檔說使用BitConverter.ToString Method (Byte[]) on msdn

這將在十六進制基地返回數字的字符串表示。 範例(用於代表數量的字節數組):

00-01-02-04-08-10-20-40-80-FF 
+0

對不起,這不起作用。這將輸出1F-40-45-1F,我期望它輸出B8-1E-45-C0 – nullable