Бинарные текст в 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;
    }

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

спасибо!

6 ответов


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

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

тогда, если вы хотите соответствующий символ в виде строки:

String str = new Character((char)charCode).toString();

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

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

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

N. B. использует UTF char set

альтернативно с помощью строкового конструктора:

String text = new String(bytes, 0, bytes.length, "ASCII");

Это мой (отлично работает на 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');

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


вот и ответ.

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

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

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

посмотреть parseInt