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