Java: Биты -> Байты -> Кодировка строк

В Java у меня есть строка битов, например. "01100111000111...". Далее я хочу сделать следующее:

  1. преобразовать строку в массив байтов, что я успешно сделал, используя: byte[] bytes = new BigInteger(bits, 2).toByteArray();
  2. Затем я хочу преобразовать байты в строку, что я пытался сделать, используя: String byteString = new String(bytes, "UTF-8");, но результаты неверны (мусорные символы и т. д.).

Я думаю, что "UTF-8" - неправильная кодировка.

Скажите, пожалуйста, есть ли другой способ получить строку из таких байтов или правильную кодировку.


person seou1    schedule 12.05.2016    source источник
comment
Я думаю, что US-ASCII будет работать.   -  person seou1    schedule 12.05.2016
comment
так что вы можете дать свой собственный ответ на свой вопрос :-)   -  person Leo    schedule 12.05.2016
comment
Ну нет. Просто думал, но не получилось. Так что да, ответ все еще требуется.   -  person seou1    schedule 12.05.2016
comment
если у вас нет кодировки, лучшее, что вы можете сделать, это попробовать их и проверить результаты, пока не выясните, какая из них правильная.   -  person Leo    schedule 12.05.2016
comment
FWIW, я начал со строки 011000010110001001100011 и просмотрел с ней ваш код. Я получил ожидаемый результат abc. Так что вы все делаете правильно, но у вас вполне может быть неправильная кодировка. Боюсь, вам придется поискать... но я бы рекомендовал начать с тех, что перечислены в java.nio.charset.StandardCharsets.   -  person dcsohl    schedule 12.05.2016
comment
Однако следует отметить одну вещь: если исходная строка начинается с 1 и имеет длину, кратную 8 символам, то вызов BigInteger(bits, 2).toByteArray() завершится начальным 0 в массиве байтов, что может запутать последующее построение строки. .   -  person dcsohl    schedule 12.05.2016


Ответы (1)


Отредактировано после вашего комментария:

String string = "01100111000111";
byte[] bytes = new BigInteger(string, 2).toByteArray();

String out = "";

for(byte b: bytes)
 out+= String.format("%8s", Integer.toBinaryString(b & 0xFF)).replace(' ', '0');

System.out.println(out);

выход:

0001100111000111

Надеюсь, это может помочь.

person Mario Cairone    schedule 12.05.2016
comment
Я думаю, что это несколько openSource предложил выше. Но вопрос в том, что я хочу, чтобы строка из 1 и 0 считалась двоичной, а не каждая цифра байтами. Затем 8 бит строки преобразуются в двоичный файл, который присваивается байту [], который затем требуется в строке. - person seou1; 12.05.2016