16-разрядная шестнадцатеричная строка для подписанного int в Java

У меня есть строка в Java, представляющая подписанное 16-битное значение в HEX. Эта строка может содержать от "0000" до "FFFF".

Я использую Integer.parseInt("FFFF",16) для преобразования его в целое. Однако это возвращает значение без знака (65535).

Я хочу, чтобы он возвращал подписанное значение. В этом конкретном примере "FFFF" должен возвращать -1.

Как я могу это достичь? Поскольку это 16-битное значение, которое я думал об использовании Short.parseShort("FFFF",16), но это говорит мне, что я вне диапазона. Я думаю, parseShort() ожидает отрицательный знак.

Ответ 1

Вы можете сделать int, возвращенный с Integer.parseInt() коротким:

short s = (short) Integer.parseInt("FFFF",16);
System.out.println(s);

Результат:

-1

Ответ 2

попробовать

int i = (short) Integer.parseInt("FFFF", 16);