Разбор шестнадцатеричной строки в Integer вызывает исключение NumberFormatException?
Итак, в Java вы знаете, как вы можете объявить целые числа следующим образом:
int hex = 0x00ff00;
Я думал, что вы сможете изменить этот процесс. У меня есть этот код:
Integer.valueOf(primary.getFullHex());
где primary - объект пользовательского класса Color. Конструктор принимает Integer для непрозрачности (0-99) и шестнадцатеричную строку (например, 00ff00
).
Это метод getFullHex
:
public String getFullHex() {
return ("0x" + hex);
}
Когда я вызываю этот метод, он дает мне это NumberFormatException
:
java.lang.NumberFormatException: For input string: "0xff0000"
Я не понимаю, что происходит. Может кто-нибудь объяснить?
Ответы
Ответ 1
Помогло ли это?
Integer.parseInt("00ff00", 16)
16
означает, что вы должны интерпретировать строку как 16-разрядную (шестнадцатеричную). Используя 2
, вы можете анализировать двоичный номер, 8
означает восьмеричный. 10
по умолчанию и анализирует десятичные числа.
В вашем случае Integer.parseInt(primary.getFullHex(), 16)
не будет работать из-за префикса 0x
, добавленного getFullHex()
- избавиться, и все будет в порядке.
Ответ 2
Integer.valueOf(string) принимает десятичное представление. Вы должны указать, что номер находится в шестнадцатеричном формате, например.
int value = Integer.valueOf("00ff0000", 16);
Обратите внимание, что Integer.valueOf (строка, 16); не принимает префикс 0x
. Если ваша строка содержит префикс 0x
, вы можете использовать Integer.decode ( "0x00ff0000" );
Ответ 3
Попробуйте использовать метод декодирования:
Integer.decode("0x00ff00");
DecodableString:
- Signopt DecimalNumeral
- Signopt 0x HexDigits
- Signopt 0X HexDigits
- Signopt # HexDigits
- Signopt 0 OctalDigits
Вы можете прочитать об этом здесь
https://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html#decode(java.lang.String)
Ответ 4
Метод parseInt принимает только номер числа, а не какой-либо "базовый" индикатор, такой как "0x" для шестнадцатеричного кода или "0" для восьмеричного. Используйте его так:
int decimal = Integer.parseInt("1234", 10);
int octal = Integer.parseInt("1234", 8);
int hex = Integer.parseInt("1234", 16);
Ответ 5
Это должно сделать это:
String hex = "FA";
int intValue = Integer.parseInt(hex, 16);
И если вы хотите генерировать шестнадцатеричное представление целого числа, используйте
String hex = Integer.toHexString(12);
Ответ 6
Будет ли это работать?
Long.parseUnsignedLong(value, 16);