用于Hex的BitConverter VS ToString

时间:2011-05-24 07:31:57

标签: c# numbers hex endianness bitconverter

只是想知道是否有人可以解释为什么以下两行代码会返回“不同”的结果?是什么导致了反转的价值?这与字节序有关吗?

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

2 个答案:

答案 0 :(得分:13)

int.MaxValue.ToString("X")输出7FFFFFFF,即整个数字2147483647

另一方面,BitConverter.GetBytes返回内存中表示2147483647的字节数组。在您的机器上,此数字存储在little-endian中(最后一个字节)。并且BitConverter.ToString在每个字节上单独运行,因此不会重新排序输出以提供与上面相同的内容,从而保留内存顺序。

但是两个值相同:7F-FF-FF-FFint.MaxValue,大端为FF-FF-FF-7FBitConverter为{{1}},为little-endian。相同的号码。

答案 1 :(得分:0)

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

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

HTH