Двоичный в текст в Java

У меня есть строка с двоичными данными (1110100). Я хочу вывести текст, чтобы распечатать его (1110100 напечатает «t»). Я пробовал это, это похоже на то, что я использовал для преобразования моего текста в двоичный файл, но он вообще не работает:

    public static String toText(String info)throws UnsupportedEncodingException{
        byte[] encoded = info.getBytes();
        String text = new String(encoded, "UTF-8");
        System.out.println("print: "+text);
        return text;
    }

Любые исправления или предложения будут высоко оценены.

Спасибо!


person Nick    schedule 18.11.2010    source источник


Ответы (7)


Вы можете использовать Integer.parseInt с основанием 2 (двоичное), чтобы преобразовать двоичную строку в целое число:

int charCode = Integer.parseInt(info, 2);

Затем, если вы хотите, чтобы соответствующий символ был строкой:

String str = new Character((char)charCode).toString();
person casablanca    schedule 18.11.2010
comment
Спасибо, это имеет смысл, но я не понимаю, как сделать новый Character из int (charCode) - person Nick; 18.11.2010
comment
@Nick: Просто приведи его к char. - person casablanca; 18.11.2010
comment
Могу ли я назвать эту вещь векторным представлением текста? - person S Gaber; 30.04.2012

Это мой (отлично работает на Java 8):

String input = "01110100"; // Binary input as String
StringBuilder sb = new StringBuilder(); // Some place to store the chars

Arrays.stream( // Create a Stream
    input.split("(?<=\\G.{8})") // Splits the input string into 8-char-sections (Since a char has 8 bits = 1 byte)
).forEach(s -> // Go through each 8-char-section...
    sb.append((char) Integer.parseInt(s, 2)) // ...and turn it into an int and then to a char
);

String output = sb.toString(); // Output text (t)

и печать сжатого метода на консоль:

Arrays.stream(input.split("(?<=\\G.{8})")).forEach(s -> System.out.print((char) Integer.parseInt(s, 2))); 
System.out.print('\n');

Я уверен, что есть «лучшие» способы сделать это, но это самый маленький из возможных способов.

person Leon Kasko    schedule 19.06.2016

Я знаю, что OP заявил, что их двоичный файл был в формате String, но для полноты картины я подумал, что добавлю решение для прямого преобразования из byte[] в буквенное строковое представление.

Как заявил casablanca, вам в основном нужно получить числовое представление буквенного символа. Если вы пытаетесь преобразовать что-либо длиннее одного символа, оно, вероятно, будет иметь вид byte[], и вместо того, чтобы преобразовывать его в строку, а затем использовать цикл for для добавления символов каждого byte, вы можете использовать ByteBuffer и CharBuffer, чтобы сделать это за вас:

public static String bytesToAlphabeticString(byte[] bytes) {
    CharBuffer cb = ByteBuffer.wrap(bytes).asCharBuffer();
    return cb.toString();
}

Примечание. Использует набор символов UTF

Альтернативно, используя конструктор String:

String text = new String(bytes, 0, bytes.length, "ASCII");
person tarka    schedule 13.08.2014

Вот ответ.

private String[] splitByNumber(String s, int size) {
    return s.split("(?<=\\G.{"+size+"})");
}
person Nelson Poon    schedule 14.08.2012

Наоборот (где «информация» - это входной текст, а «s» - его двоичная версия)

byte[] bytes = info.getBytes();
BigInteger bi = new BigInteger(bytes);
String s = bi.toString(2); 
person Emil    schedule 18.11.2010

Посмотрите на parseInt. Вам также может понадобиться приведение и Character.toString функция.

person Matthew Flaschen    schedule 18.11.2010

Также вы можете использовать альтернативное решение без потоков и регулярных выражений (на основе ответа casablanca):

public static String binaryToText(String binaryString) {
    StringBuilder stringBuilder = new StringBuilder();
    int charCode;
    for (int i = 0; i < binaryString.length(); i += 8) {
        charCode = Integer.parseInt(binaryString.substring(i, i + 8), 2);
        String returnChar = Character.toString((char) charCode);
        stringBuilder.append(returnChar);
    }
    return stringBuilder.toString();
}

вам просто нужно добавить указанный символ в виде строки к последовательности символов.

person invzbl3    schedule 13.05.2020