2013-03-04 2 views
11

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

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

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

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

ответ

13

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

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

Результат:

-1 
+0

@AndreasFester, почему это требует дальнейшего бросание коротким ? – Rachael

+2

@Rachael Поскольку значение, возвращаемое 'Integer.parseInt', по-прежнему является (32-разрядным) значением' int' - для '0xFFFF', то есть' 65535'. Назначая его «короткому», верхние 16 бит фактически отбрасываются, а бит 15 принимается за знак знака для короткого значения, в результате чего «-1» (все биты равны 1). Бросок должен сообщать компилятору, что эта потеря бит предназначена - без приведения в действие, компилятор будет жаловаться на «возможное преобразование с потерями из int в short» –

+0

@ AndreasFester благодарит вас за это замечательное объяснение. – Rachael

2

попробовать

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

Спасибо за помощь! – Dimme

 Смежные вопросы

  • Нет связанных вопросов^_^