Java: преобразование двоичной строки в шестую строку

Мне нужно преобразовать двоичную строку в шестнадцатеричную строку, но у меня есть проблема. Я преобразовал двоичную строку в шестнадцатеричную строку с помощью этого метода:

public static String binaryToHex(String bin){
   return Long.toHexString(Long.parseLong(bin,2));
}

это нормально! но я теряю нули слева от строки. Пример:

метод возвращает это: 123456789ABCDEF, но я хочу вернуть это:

00000123456789ABCDEF

Ответ 1

Вместо Long.toHexString я использовал бы Long.parseLong для синтаксического анализа значения, а затем String.format для вывода значения с требуемой шириной (21 в вашем примере):


public static String binaryToHex(String bin) {
   return String.format("%21X", Long.parseLong(bin,2)) ;
}

Ответ 2

Не очень элегантный, но работает

public static String binaryToHex(String bin) {
    String hex = Long.toHexString(Long.parseLong(bin, 2));
    return String.format("%" + (int)(Math.ceil(bin.length() / 4.0)) + "s", hex).replace(' ', '0');
}

Я использовал String.format() для левой строки пэда с пробелами, а затем заменил(), чтобы заменить его нулями.

Ответ 3

Просто добавьте нули вручную. Здесь один из способов:

public static String binaryToHex(String bin){
    return ("0000000000000000" + Long.toHexString(Long.parseLong(bin, 2)).replaceAll(".*.{16}", "$1");
}