【问题标题】:Integer to hex String NumberformatException整数到十六进制字符串 NumberformatException
【发布时间】:2013-10-22 21:58:26
【问题描述】:

我想将整数值转换为十六进制字符串。我迅速搜索了 stackoverflow 并使用了following way(正如公认的解决方案所表明的那样——但看起来不够仔细):

Integer.valueOf(String.valueOf(n), 16);

但是在尝试转换时

 Integer.valueOf(String.valueOf(-2115381772), 16)

它会抛出一个NumberFormatException出于好奇 - 为什么会抛出 NumberFormatException?

(之后我将代码更改为Integer.toHexString(-2115381772),一切正常。)

【问题讨论】:

    标签: java int hex numberformatexception


    【解决方案1】:

    因为,

    Integer.valueOf(String.valueOf(-2115381772), 16) 认为 -2115381772 以十六进制 (16) 为基数,这超出了 int 值的范围。所以你得到了那个例外。

    Integer.toHexString(-2115381772) 认为-2115381772 的值是十进制的,它在int 值的范围内。

    【讨论】:

      【解决方案2】:

      -2115381772 因为十六进制不适合整数。

      改用Long.valueOf(String.valueOf(-2115381772), 16);

      【讨论】:

        【解决方案3】:

        int 的最小值是-2147483648

        所以当你给出任何小于-80000000 的值时,NumberFormatException 将被抛出。

        因为Integer.valueOf(String.valueOf(-80000000), 16) 给出-2147483648 作为输出,这是int 的最小值。

        【讨论】:

        • 不完全理解。 -2115381772
        • 好吧,你提供了十六进制值-2115381772,这是十进制的-142089918322,肯定小于-2147483648(顺便说一句。-2115381772 > -2147483648)。
        猜你喜欢
        • 2017-08-07
        • 1970-01-01
        • 2012-07-07
        • 2019-04-18
        • 2013-04-28
        • 2013-09-04
        • 2010-10-04
        • 2018-03-21
        • 2017-08-12
        相关资源
        最近更新 更多