Фон
Используя Integer.parseInt(someIntString , основание счисления) не всегда работает и в некоторых случаях может возвращать исключение NumberFormatException.
Я проверил API, и он говорит, что будет возвращено такое исключение:
если строка не может быть проанализирована как целочисленное значение или система счисления ‹ Character.MIN_RADIX || основание > Символ.MAX_RADIX.
Пример кода, который вызывает исключение:
System.out.println(Integer.parseInt("ff00ff00",16));
В java я получаю такое же исключение.
Поскольку целое число содержит 4 байта, это все еще должно работать, но это не так.
Вот доказательство того, что такое возможно:
final String input="ff00ff00";
int output=0;
for(int i=0;i<input.length();++i)
{
output<<=4;
final char c=input.charAt(i);
if(c>='a')
output+=c-'a'+10;
else output+=c-'0';
}
System.out.println(output);
System.out.println(Integer.toHexString(output));
Обратите внимание, что я знаю об использовании цвета . parseColor() (и она, вероятно, очень похожа на код, который я написал), но я хочу обрабатывать любую систему счисления, а не только шестнадцатеричную.
Я также знаю, что использование parseInt поддерживает синтаксический анализ отрицательных значений, поэтому это, вероятно, вызывает исключение.
Вопрос
Есть ли встроенная функция или известный алгоритм для преобразования строки в целое число с использованием любой системы счисления?
Я предполагаю, конечно, что целочисленная переменная может содержать значение (используя максимум 4 байта) и что знак числа не имеет значения.