hex to int number format exception in java

前端 未结 4 2124
野趣味
野趣味 2020-12-07 03:04

I am getting a number format exception when trying to do it

int temp = Integer.parseInt(\"C050005C\",16);

if I reduce one of the digits in

相关标签:
4条回答
  • 2020-12-07 03:46

    This would cause an integer overflow, as integers are always signed in Java. From the documentation of that method (emphasis mine):

    An exception of type NumberFormatException is thrown if any of the following situations occurs:

    • The first argument is null or is a string of length zero.
    • The radix is either smaller than Character.MIN_RADIX or larger than Character.MAX_RADIX.
    • Any character of the string is not a digit of the specified radix, except that the first character may be a minus sign '-' ('\u002D') provided that the string is longer than length 1.
    • The value represented by the string is not a value of type int.

    It would fit into an unsigned integer, though. As of Java 8 there's Integer.parseUnsignedInt (thanks, Andreas):

    int temp = Integer.parseIntUnsigned("C050005C",16);
    

    On earlier Java versions your best bet here might to use a long and then just put the lower 4 bytes of that long into an int:

    long x = Long.parseLong("C050005C", 16);
    int y = (int) (x & 0xffffffff);
    

    Maybe you can even drop the bitwise "and" here, but I can't test right now. But that could shorten it to

    int y = (int) Long.parseLong("C050005C", 16);
    
    0 讨论(0)
  • 2020-12-07 03:55

    Use this:

    long temp = Long.parseLong("C050005C",16);

    0 讨论(0)
  • 2020-12-07 03:57

    C050005C is 3226468444 decimal, which is more than Integer.MAX_VALUE. It won't fit in int.

    0 讨论(0)
  • 2020-12-07 04:02

    The signed int type ranges from 0x7FFFFFFF to -0x80000000.

    0 讨论(0)
提交回复
热议问题