2011-05-24 43 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