2011-05-24 18 views
4

想知道是否有人可以解釋爲什麼下面兩行代碼返回「不同」結果?什麼原因導致顛倒值?這是否與endianness有關?BitConverter VS十六進制的ToString

int.MaxValue.ToString("X") //Result: 7FFFFFFF 
BitConverter.ToString(BitConverter.GetBytes(int.MaxValue)) //Result: FF-FF-FF-7F 

回答

13

int.MaxValue.ToString("X")輸出7FFFFFFF,即,數2147483647整體

另一方面,BitConverter.GetBytes在內存中返回代表2147483647的字節數組。在你的機器上,這個數字存儲在little-endian(最後一個字節)中。並且BitConverter.ToString分別對每個字節進行操作,因此不對輸出重新排序以提供與上述相同的內容,從而保留內存順序。

然而,兩個值是相同的:7F-FF-FF-FF對於int.MaxValue,在大端,和FF-FF-FF-7F對於BitConverter,在小端。相同的數字。

+0

真棒詳細答案。謝謝 – 2011-05-24 07:53:44

0

我猜是因爲GetBytes返回一個字節數組,它BitConverter.ToString格式 - 在我看來 - 相當漂亮

而且還請記住,按位represantattion可能是從不同的價值!這取決於最重要的字節在哪裏!

HTH

+0

是的,但是7FFFFFFF和FFFFFF7F是兩個不同的值... – 2011-05-24 07:34:54

+0

是啊,對不起,我只有一直在喝咖啡。我更新了我的答案 - 二元譴責和價值是/可能會有所不同。 – 2011-05-24 07:35:48

+0

@Maxim Gershkovich :如果後者是以低字節順序顯示的話,則不應該如此.... – 2011-05-24 07:35:56