2012-11-11 74 views
8

請注意,我不太確定此問題屬於此網站,但我試圖建設性。

爲什麼代碼將IntPtr轉換爲字符串中的十六進制字符串。格式

IntPtr ptr = new IntPtr(1234); 
Console.WriteLine(string.Format("{0:X8}", ptr)); 
Console.WriteLine(ptr.ToString("X8")); 
Console.WriteLine(string.Format("{0:X8}", ptr.ToInt32())); 

輸出

1234 
000004D2 
000004D2 

爲什麼沒有當格式要求等等六角格式應用於IntPtr參數直接?是否有任何已知的反對設計功能的論點 - ?
如果沒有反對這種設計的論據,那麼我應該通過哪個渠道向Microsoft報告此問題?


另請注意,如果要求調試器以十六進制顯示IntPtr值(如果有)。
我發現這將是相當直觀和相對頻繁的方式打印出IntPtr值。我也發現了其他使用第一行的人編寫的代碼,顯然期望十六進制結果,但實際上結果是不同的。我也花了一些時間來注意到這個問題,這使得理解日誌消息變得複雜。

回答

2

這是因爲在第一種情況下,由於IntPtr不是與String.Format一起使用的內置整型類型之一,所以調用ptr.ToString()以返回字符串。由於格式化僅在轉換爲字符串之後應用,因此X8格式說明符不起作用。

相關問題