只是想知道是否有人可以解释为什么以下两行代码返回“不同”的结果?是什么导致了相反的价值观?这与字节顺序有关吗?
int.MaxValue.ToString("X") //Result: 7FFFFFFF
BitConverter.ToString(BitConverter.GetBytes(int.MaxValue)) //Result: FF-FF-FF-7F
只是想知道是否有人可以解释为什么以下两行代码返回“不同”的结果?是什么导致了相反的价值观?这与字节顺序有关吗?
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
for int.MaxValue
, in big-endian 和FF-FF-FF-7F
for BitConverter
, in little-endian。同号。
我猜是因为GetBytes
返回了一个格式化的字节数组BitConverter.ToString
——在我看来——相当不错
还要记住,按位表示可能与值不同!这取决于最重要的字节所在的位置!
hth