У меня есть строка в Java, представляющая 16-битное значение в HEX. Эта строка может быть чем угодно: от "0000"
до "FFFF"
.16-разрядная шестнадцатеричная строка для подписанного int в Java
Я использую Integer.parseInt("FFFF",16)
, чтобы преобразовать его в целое число. Однако это возвращает значение без знака (65535
).
Я хочу, чтобы он возвращал подписанное значение. В этом конкретном примере "FFFF"
должен возвращать -1
.
Как я могу это достичь? Поскольку его 16-битное значение я думал об использовании Short.parseShort("FFFF",16)
, но это говорит мне, что я вне диапазона. Я думаю, parseShort()
ожидает отрицательный знак.
@AndreasFester, почему это требует дальнейшего бросание коротким ? – Rachael
@Rachael Поскольку значение, возвращаемое 'Integer.parseInt', по-прежнему является (32-разрядным) значением' int' - для '0xFFFF', то есть' 65535'. Назначая его «короткому», верхние 16 бит фактически отбрасываются, а бит 15 принимается за знак знака для короткого значения, в результате чего «-1» (все биты равны 1). Бросок должен сообщать компилятору, что эта потеря бит предназначена - без приведения в действие, компилятор будет жаловаться на «возможное преобразование с потерями из int в short» –
@ AndreasFester благодарит вас за это замечательное объяснение. – Rachael