Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

numeric type parse functions exception with negative numbers

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.

like image 328
User8500049 Avatar asked Mar 24 '20 10:03

User8500049


2 Answers

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
like image 106
Eran Avatar answered Nov 08 '22 06:11

Eran


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.

like image 44
user2357112 supports Monica Avatar answered Nov 08 '22 07:11

user2357112 supports Monica