16 bit hex string to signed int in Java
12,424
Solution 1
You can cast the int
returned from Integer.parseInt()
to a short:
short s = (short) Integer.parseInt("FFFF",16);
System.out.println(s);
Result:
-1
Solution 2
try
int i = (short) Integer.parseInt("FFFF", 16);
Comments
-
Dimme almost 2 years
I have a string in Java representing a signed 16-bit value in HEX. This string can by anything from
"0000"
to"FFFF"
.I use
Integer.parseInt("FFFF",16)
to convert it to an integer. However, this returns an unsigned value (65535
).I want it to return a signed value. In this particular example
"FFFF"
should return-1
.How can I achieve this? Since its a 16-bit value I thought of using
Short.parseShort("FFFF",16)
but that tells me that I am out of range. I guessparseShort()
expects a negative sign. -
Rachael about 8 years@AndreasFester , why does this require further cast as short?
-
Andreas Fester about 8 years@Rachael Because the value returned by
Integer.parseInt
is still a (32 bit)int
value - for0xFFFF
, that is65535
. By assigning it to ashort
, the upper 16 bits are effectively discarded and bit 15 is taken as the sign bit for the short value, resulting in-1
(all bits are 1). The cast is required to tell the compiler that this loss of bits is intended - without the cast, the compiler would complain aboutpossible lossy conversion from int to short
-
Rachael about 8 years@AndreasFester thank you for that great explanation.