Вопрос

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

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

Спасибо!

Это было полезно?

Решение

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

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

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

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

Другие советы

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

Так как касабланка Указал, что вы в основном нужно получить численное представление алфавита. Если вы пытаетесь преобразовать что-либо более длиннее, чем один символ, он, вероятно, будет придет как byte[] и вместо того, чтобы преобразовать это в строку, а затем с помощью цикла для добавления символов каждого byte вы можете использовать BYTEBUFFER. а также Шарбафер Чтобы сделать подъем для вас:

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

NB использует 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» двоичной версией IT)

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

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

public static String binaryToText(String binary) {
    return Arrays.stream(binary.split("(?<=\\G.{8})"))/* regex to split the bits array by 8*/
                 .parallel()
                 .map(eightBits -> (char)Integer.parseInt(eightBits, 2))
                 .collect(
                                 StringBuilder::new,
                                 StringBuilder::append,
                                 StringBuilder::append
                 ).toString();
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top