Все переводит согласно входным данным. Решал так - переводил в 10-чную, потом соответственно в 2-чную и 16-чную. Реализацию брал из прошлых задач. Причем метод toHex принимает
package com.javarush.task.pro.task09.task0908;
import java.util.regex.Pattern;
/*
Двоично-шестнадцатеричный конвертер
*/
public class Solution {
public static String HEX = "0123456789abcdef";
public static void main(String[] args) {
String binaryNumber = "100111010000";
System.out.println("Двоичное число " + binaryNumber + " равно шестнадцатеричному числу " + toHex(binaryNumber));
String hexNumber = "9d0";
System.out.println("Шестнадцатеричное число " + hexNumber + " равно двоичному числу " + toBinary(hexNumber));
}
public static String toHex(String binaryNumber) {
if (binaryNumber == "" || binaryNumber == null)
return "";
//int count = 0;
for (int i = 0; i < binaryNumber.length(); i++) {
if (binaryNumber.charAt(i) == 48 || binaryNumber.charAt(i) == 49){
continue;
}
else{
return "";
}
}
int dec = 0;
for (int i = 0; i < binaryNumber.length(); i++) {
dec += binaryNumber.charAt(binaryNumber.length() - 1 -i) % 2 * Math.pow(2.0, (double) i);
}
String hex = "";
//public String HEX = "0123456789abcdef";
while (dec != 0){
hex = HEX.charAt(dec % 16) + hex;
dec /= 16;
}
return hex;
}
public static String toBinary(String hexNumber) {
String s = "";
if (hexNumber == null)
return s;
for (int i = 0; i < hexNumber.length(); i++) {
char current = hexNumber.charAt(i);
// проверяем, чтобы в строке не было цифр, помимо 0-9 и a-f
if (!(current > 47 && current < 58) && !(current > 96 && current < 103))
return "";
}
int decimalNumber = 0;
for (int i = 0; i < hexNumber.length(); i++) {
decimalNumber = 16 * decimalNumber + HEX.indexOf(hexNumber.charAt(i));
}
String bin = "";
while (decimalNumber != 0) {
bin = decimalNumber % 2 + bin;
decimalNumber /= 2;
}
return bin;
}
}