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