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
When I try to convert hexadecimal number to integer type, negative numbers with parseInt or valueOf methods, the method throws NumberFormatException for negative numbers. I couldn't find the answer anywhere.
Integer.parseInt() and Integer.valueOf() expect the minus sign (-) for negative values.
Hence "FFFFFFFF" is parsed as a positive value, which is larger than Integer.MAX_VALUE. Hence the exception.
If you want to parse it as a negative value, parse it as long and cast to int:
System.out.println((int)Long.parseLong("FFFFFFFF", 16));
prints
-1
Integer.parseInt("FFFFFFFF", 16) doesn't mean "give me the int with this hexadecimal bit pattern". It means "interpret FFFFFFFF as a base-16 representation of a number, and give me an int representing the same number".
That number is the positive number 4294967295, which is out of range for an int, hence the exception.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With