【问题标题】:BitConverter VS ToString for Hex十六进制的 BitConverter VS ToString
【发布时间】:2011-05-24 07:31:57
【问题描述】:

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

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

【问题讨论】:

    标签: c# numbers hex endianness bitconverter


    【解决方案1】:

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

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

    但是这两个值是相同的:7F-FF-FF-FF 代表 int.MaxValue,采用大端序,FF-FF-FF-7F 代表 BitConverter,采用小端序。同一个号码。

    【讨论】:

    • 很棒的详细答案。谢谢
    【解决方案2】:

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

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

    【讨论】:

    • 是的,对不起,我到现在只喝咖啡。我更新了我的答案 - 二进制表示和值是/可能不同。
    猜你喜欢
    • 2018-11-30
    • 1970-01-01
    • 2013-02-20
    • 1970-01-01
    • 2011-12-09
    • 2018-07-26
    • 2011-06-01
    • 2014-08-24
    • 2014-04-20
    相关资源
    最近更新 更多