【问题标题】:Integer.parseInt: 0xff80CBC4 is an invalid intInteger.parseInt: 0xff80CBC4 是无效的 int
【发布时间】:2017-08-10 02:34:57
【问题描述】:

有人能解释一下为什么下面的第二个和第三个语句会失败吗?

Integer myColor = 0xff80CBC4 //works

Integer.parseInt("0xff80CBC4".substring(2), 16) //does not work
Integer.decode("0xff80CBC4") //does not work

运行时抛出如下异常:

java.lang.NumberFormatException: Invalid int: "ff80CBC4"

如果您在ff80CBC4 的开头使用00 而不是ff,它可以工作。为什么 ff 会失败?

【问题讨论】:

    标签: java integer hex parseint


    【解决方案1】:

    请注意,没有“它不起作用”之类的东西。发出异常。 提及他们。

    Integer.parseInt()Integer.decode() 失败,因为您尝试解析的文字 0xff80CBC4 对于有符号整数来说太大而无法表示它。 (阅读two's complement notation 找出原因。)

    事实上它可以被解释为一个负整数,但这些函数不知道这一点,所以他们试图将它解析为一个正整数。

    试试这个:

        String s = "0xff80CBC4";
        int a = Integer.parseInt( s.substring( 2, 4 ), 16 );
        int r = Integer.parseInt( s.substring( 4, 6 ), 16 );
        int g = Integer.parseInt( s.substring( 6, 8 ), 16 );
        int b = Integer.parseInt( s.substring( 8, 10 ), 16 );
        int argb = a << 24 | r << 16 | g << 8 | b;
        System.out.printf( "%2x %2x %2x %2x %8x\n", a, r, g, b, argb );
    

    打印出来:

    ff 80 cb c4 ff80cbc4
    

    【讨论】:

    • 该值表示用于 android 的 ARGB 颜色。如何正确解析值? (所以我得到-8336444。它必须是一个整数)
    • @Campbell 我用不涉及长解析的解决方案修改了我的答案。
    • @DontPanic 我调试了它,你是对的,所以我改变了我的答案。
    【解决方案2】:

    字符串定义了一个对于 Integer 对象来说太大的数字。例如,您可以使用 Long。

        Long a = Long.parseLong("0xff80CBC4".substring(2), 16);
        System.out.println(a); //4286630852
        Integer max = Integer.MAX_VALUE;
        System.out.println(max); //2147483647
    

    【讨论】:

      【解决方案3】:

      Integer.decode() 需要正值,但 NumberFormatException 不是由这个原因引发的。

      当你将“0xff80CBC4”传递给 Integer.decode() 时,“0x”被丢弃,所以值为 ff80CBC4,对于 Integer 来说太大了。

      // Handle radix specifier, if present
              if (nm.startsWith("0x", index) || nm.startsWith("0X", index)) {
                  index += 2;
                  radix = 16;
              }
      

      但如果你将“0xff80CBC4”传递给 Long.decode() - 一切都会好起来的。

      【讨论】:

      • 但我需要它作为整数溢出,因为那是 android 用于颜色的格式。我该怎么做?
      猜你喜欢
      • 2014-05-26
      • 1970-01-01
      • 2020-02-18
      • 2010-11-05
      • 2011-12-23
      • 2017-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多