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);
Share:
12,424
Dimme
Author by

Dimme

Meh.

Updated on June 14, 2022

Comments

  • Dimme
    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 guess parseShort() expects a negative sign.

  • Rachael
    Rachael about 8 years
    @AndreasFester , why does this require further cast as short?
  • Andreas Fester
    Andreas Fester about 8 years
    @Rachael Because the value returned by Integer.parseInt is still a (32 bit) int value - for 0xFFFF, that is 65535. By assigning it to a short, 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 about possible lossy conversion from int to short
  • Rachael
    Rachael about 8 years
    @AndreasFester thank you for that great explanation.