Бинарный текст в Java - PullRequest
       60

Бинарный текст в Java

6 голосов
/ 18 ноября 2010

У меня есть строка с двоичными данными (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 ]

26 голосов
/ 18 ноября 2010

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

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

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

String str = new Character((char)charCode).toString();
4 голосов
/ 13 августа 2014

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

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

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

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

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

String text = new String(bytes, 0, bytes.length, "ASCII");
3 голосов
/ 19 июня 2016

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

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

1 голос
/ 14 августа 2012

Вот ответ.

private String[] splitByNumber(String s, int size) {
    return s.split("(?<=\\G.{"+size+"})");
}
1 голос
/ 18 ноября 2010

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

byte[] bytes = info.getBytes();
BigInteger bi = new BigInteger(bytes);
String s = bi.toString(2); 
0 голосов
/ 18 ноября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...