Я думаю, что самый простой и гибкий способ - использовать BigInteger. Он допускает произвольные размеры целых чисел, передаваемые в виде строки.
public static void main(String[] args) {
System.out.println(toBase("FF", 16, 10));
System.out.println(toBase("FF", 16, 2));
System.out.println(toBase("123", 2, 16));
System.out.println(toBase("111111111111111111111111111111111111111111111111111",2, 16));
}
Этот метод выполняет следующие действия:
- принимает исходную и целевую базы.
- возвращает требуемое преобразование.
- выдает исключение, если база не подходит для указанного числа.
- , в последнем случае возвращается ноль.
public static String toBase(String num, int srcBase, int dstBase) {
try {
BigInteger b = new BigInteger(num,srcBase);
return b.toString(dstBase);
} catch (Exception e) {
System.out.println("Invalid argument : " + e.getLocalizedMessage());
}
return null;
}
Вывод приведенных выше примеров:
255
11111111
7ffffffffffff
Invalid argument : For input string: "123" under radix 2
null