【问题标题】:numeric type parse functions exception with negative numbers带有负数的数字类型解析函数异常
【发布时间】:2023-03-07 05:51:01
【问题描述】:
System.out.println(Integer.parseInt("7FFFFFFF", 16)); //this is ok.
System.out.println(Integer.parseInt("FFFFFFFF", 16)); //this throws Exception
System.out.println(Integer.valueOf("FFFFFFFF", 16)); //this throws Exception

当我尝试使用 parseInt 或 valueOf 方法将十六进制数转换为整数类型、负数时,该方法会为负数抛出 NumberFormatException。我在任何地方都找不到答案。

【问题讨论】:

  • FFFFFFFF 超出了我认为的整数范围。

标签: java integer hex parseint


【解决方案1】:

Integer.parseInt("FFFFFFFF", 16) 并不意味着“给我这个十六进制位模式的int”。它的意思是“将FFFFFFFF 解释为一个数字的base-16 表示,并给我一个代表相同数字的int”。

这个数字是 数字 4294967295,它超出了 int 的范围,因此例外。

【讨论】:

    【解决方案2】:

    Integer.parseInt()Integer.valueOf() 期望负号 (-) 表示负值。

    因此“FFFFFFFF”被解析为大于Integer.MAX_VALUE的正值。因此例外。

    如果要将其解析为负值,请将其解析为long并转换为int

    System.out.println((int)Long.parseLong("FFFFFFFF", 16));
    

    打印

    -1
    

    【讨论】:

      猜你喜欢
      • 2012-07-03
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2015-04-22
      • 2019-08-18
      • 2015-06-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多