用于十六进制的 BitConverter 与 ToString
只是想知道是否有人可以解释为什么下面两行代码返回“不同”的结果?是什么导致了相反的值?这与字节序有关吗?
int.MaxValue.ToString("X") //Result: 7FFFFFFF
BitConverter.ToString(BitConverter.GetBytes(int.MaxValue)) //Result: FF-FF-FF-7F
Just wondering if someone could explain why the two following lines of code return "different" results? What causes the reversed values? Is this something to do with endianness?
int.MaxValue.ToString("X") //Result: 7FFFFFFF
BitConverter.ToString(BitConverter.GetBytes(int.MaxValue)) //Result: FF-FF-FF-7F
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
int.MaxValue.ToString("X")
输出7FFFFFFF
,即数字2147483647
作为一个整体 。另一方面,
BitConverter.GetBytes
返回一个字节数组,表示内存中的2147483647
。在您的计算机上,该数字以小端存储(最高字节在最后)。 BitConverter.ToString 分别对每个字节进行操作,因此不会重新排序输出以提供与上面相同的结果,从而保留了内存顺序。但是,这两个值是相同的:
int.MaxValue
的7F-FF-FF-FF
(采用大端)和FF-FF-FF-7F
表示BitConverter
,采用小端字节序。相同的号码。int.MaxValue.ToString("X")
outputs7FFFFFFF
, that is, the number2147483647
as a whole.On the other hand,
BitConverter.GetBytes
returns an array of bytes representing2147483647
in memory. On your machine, this number is stored in little-endian (highest byte last). AndBitConverter.ToString
operates separately on each byte, therefore not reordering output to give the same as above, thus preserving the memory order.However the two values are the same :
7F-FF-FF-FF
forint.MaxValue
, in big-endian, andFF-FF-FF-7F
forBitConverter
, in little-endian. Same number.我猜是因为
GetBytes
返回一个BitConverter.ToString
格式化的字节数组 - 在我看来 - 相当好而且还要记住,按位表示可能与价值!这取决于最高有效字节所在的位置!
哈
I would guess because
GetBytes
returns an array of bytes whichBitConverter.ToString
formatted - in my opinion - rather nicelyAnd also keep in mind that the bitwise represantattion may be different from the value! This depends where the most signigicant byte sits!
hth