用于Hex的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 ,在big-endian中, FF-FF-FF-7F用于BitConverter ,在little-endian中。 相同的号码。

我猜是因为GetBytes返回一个字节数组, BitConverter.ToString格式化 – 在我看来 – 相当不错

并且还要记住,按位重新表示可能与值不同! 这取决于最重要的字节所在的位置!

心连心