想知道是否有人可以解释为什么下面两行代码返回“不同”结果?什么原因导致颠倒值?这是否与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