想知道是否有人可以解釋爲什麼下面兩行代碼返回「不同」結果?什麼原因導致顛倒值?這是否與endianness有關?BitConverter VS十六進制的ToString
int.MaxValue.ToString("X") //Result: 7FFFFFFF
BitConverter.ToString(BitConverter.GetBytes(int.MaxValue)) //Result: FF-FF-FF-7F
想知道是否有人可以解釋爲什麼下面兩行代碼返回「不同」結果?什麼原因導致顛倒值?這是否與endianness有關?BitConverter VS十六進制的ToString
int.MaxValue.ToString("X") //Result: 7FFFFFFF
BitConverter.ToString(BitConverter.GetBytes(int.MaxValue)) //Result: FF-FF-FF-7F
int.MaxValue.ToString("X")
輸出7FFFFFFF
,即,數2147483647
整體。
另一方面,BitConverter.GetBytes
在內存中返回代表2147483647
的字節數組。在你的機器上,這個數字存儲在little-endian(最後一個字節)中。並且BitConverter.ToString
分別對每個字節進行操作,因此不對輸出重新排序以提供與上述相同的內容,從而保留內存順序。
然而,兩個值是相同的:7F-FF-FF-FF
對於int.MaxValue
,在大端,和FF-FF-FF-7F
對於BitConverter
,在小端。相同的數字。
我猜是因爲GetBytes
返回一個字節數組,它BitConverter.ToString
格式 - 在我看來 - 相當漂亮
而且還請記住,按位represantattion可能是從不同的價值!這取決於最重要的字節在哪裏!
HTH
是的,但是7FFFFFFF和FFFFFF7F是兩個不同的值... – 2011-05-24 07:34:54
是啊,對不起,我只有一直在喝咖啡。我更新了我的答案 - 二元譴責和價值是/可能會有所不同。 – 2011-05-24 07:35:48
@Maxim Gershkovich :如果後者是以低字節順序顯示的話,則不應該如此.... – 2011-05-24 07:35:56
真棒詳細答案。謝謝 – 2011-05-24 07:53:44