проблема с двоичной строкой с ведущими нулями

У меня есть строка, которая преобразуется в двоичный формат, но метод двоичного преобразования удаляет начальные нули, и я не уверен, сколько начальных нулей я должен добавить в начале. Это зависит от строки, мой код выглядит следующим образом

public static void encodeString(String str){
        byte[] bytes=str.getBytes();
        String binary = new BigInteger(bytes).toString(2);

    }

person Mubee    schedule 27.09.2017    source источник
comment
Чего вы хотите достичь сразу? У большого целого числа нет начальных нулей, как и у byte, short или int. На ваш вопрос я не уверен, сколько начальных нулей я должен добавить, вы можете ответить только сами: столько, сколько вы хотите иметь.   -  person Grisgram    schedule 27.09.2017
comment
Покажите нам пример ввода/вывода, чтобы увидеть, что вы хотите.   -  person AxelH    schedule 27.09.2017
comment
Я знаю, что в BigInteger нет начальных нулей, как я хочу добиться, что позволяет предположить, что мой ввод является тестом, его двоичный файл должен быть 01110100011001010111001101110100 (с начальным нулем), но мой метод дает мне вывод 1110100011001010111001101110100 без начального нуля, как это легко для меня, я могу добавить ноль в начале строки работает нормально, но если ввод изменяется, иногда мне нужно добавить может быть больше одного нуля в начале, я просто хочу иметь точное представление о том, как угадать эти начальные нули   -  person Mubee    schedule 27.09.2017
comment
Вы можете попробовать что-то вроде этого: System.out.println(String.format("%64s", binary).replace(" ", "0")); Для этого я предполагаю, что длина строки не превышает 64 символов, и заменяю последующие пробелы начальными нулями.   -  person procrastinator    schedule 27.09.2017
comment
Я пробовал это, но вначале для меня создается больше, чем требуется нулей, этот двоичный ввод будет использоваться для шифрования, и мне нужно зашифровать каждый бит с большим, чем требуется нулем, это будет накладные расходы или проблемы с производительностью в моей программе   -  person Mubee    schedule 27.09.2017


Ответы (2)


Я понимаю, что вы пытаетесь сохранить 8-битное представление каждого символа вашего ввода String. для этого я использовал этот метод:

    public static String byteFormat(String src) {
    StringBuilder sb = new StringBuilder();

    for (int i = 0; i < src.length(); i++) {

        char chr = src.charAt(i);
        String format= String.format("%8s", Integer.toBinaryString(chr)).replace(' ', '0');
        sb.append(format);
    }
    return sb.toString();

}

и я тестировал это так:

public static void main(String[] args) throws Exception {

    System.out.println(byteFormat("test"));
}

}

выводит :
01110100011001010111001101110100

person мυѕτавєւмo    schedule 27.09.2017
comment
Для чисел он показывает странные результаты. Например, если я передам byteFormat("1"), то он покажет мне 00110001. Разве это не должно быть просто 00000001? - person procrastinator; 27.09.2017
comment
Я думаю, что запрос состоит в том, чтобы преобразовать код ascii "1" в его байтовый формат, а не заполнять пустые начальные биты - person мυѕτавєւмo; 27.09.2017
comment
@mustabelMo понял мою ошибку. :) благодарю за разъяснение. - person procrastinator; 27.09.2017

Количество начальных нулей обычно не имеет значения, в любом случае это одно и то же число.

Вы всегда можете оставить дополнение к количеству нулей, которое вы хотите вручную

person jontro    schedule 27.09.2017
comment
Если я добавлю больше, чем требуемые нули в начале, похоже, что в этом выводе есть пустые пробелы, которые мне не нужны. - person Mubee; 27.09.2017