Created
December 10, 2016 19:37
-
-
Save igrek8/c6ef7532eca3f4fd85ee8805a0391e1b to your computer and use it in GitHub Desktop.
Any base to any base number conversion
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.util.Arrays; | |
public class HelloWorld { | |
public static String calcBase(final String value, final int fromBase, final int toBase) { | |
// схема по всех возможных цифр для любой системы счистелния (максимальная 64) | |
final char[] charArray = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray(); | |
// схема цифр для изначальной системы счителния | |
final char[] fromRange = Arrays.copyOfRange(charArray, 0, fromBase); | |
// схема цифр для конечного числа | |
final char[] toRange = Arrays.copyOfRange(charArray, 0, toBase); | |
char ch; // цифра на которой мы сейчас | |
int acc = 0; // аккумулятор | |
int indexOfDigit = -1; // индекс цифры ch | |
for (int index = value.length() - 1; index >= 0; --index) { | |
ch = value.charAt(index); | |
// ищем индекс цифры ch в fromRange | |
for (int j = 0; j < fromRange.length; ++j) { | |
if (ch == fromRange[j]) { | |
// если нашли, завершаем цикл | |
indexOfDigit = j; | |
break; | |
} | |
} | |
// если по прежнему не нашли, то показываем ошибку, так как такой цифры не может быть для указанной системы счистления | |
if (indexOfDigit < 0) { | |
throw new Error("Invalid digit " + ch + " for base " + fromBase); | |
} | |
// если всё норм, добавляем в аккумулятор нашу цифру | |
acc += indexOfDigit * Math.pow(fromBase, value.length() - index - 1); | |
// сбрасываем | |
indexOfDigit = -1; | |
} | |
String convertedValue = ""; | |
while(acc > 0) { | |
// строим наше число в нужной системе счистления | |
convertedValue = toRange[acc % toBase] + convertedValue; | |
acc = (acc - (acc % toBase)) / toBase; | |
} | |
// результат конвертации | |
return convertedValue; | |
} | |
public static void main(String[] args) { | |
System.out.println(calcBase("255", 10, 16)); | |
System.out.println(calcBase("FF", 16, 10)); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment