9

我有一个包含二进制数据的字符串(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;
    }

任何更正或建议将不胜感激。

谢谢!

4

8 回答 8

27

您可以使用Integer.parseInt基数 2(二进制)将二进制字符串转换为整数:

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

然后,如果您希望将相应的字符作为字符串:

String str = new Character((char)charCode).toString();
于 2010-11-18T04:40:21.440 回答
6

这是我的(在 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');

我确信有“更好”的方法可以做到这一点,但这是你可能得到的最小的方法。

于 2016-06-19T13:24:20.893 回答
5

我知道 OP 声明他们的二进制文件是一种String格式,但为了完整起见,我想我会添加一个解决方案来直接从 a 转换byte[]为字母字符串表示。

正如卡萨布兰卡所说,您基本上需要获得字母字符的数字表示。如果您尝试转换比单个字符更长的任何内容,它可能会以 a 的形式出现byte[],而不是将其转换为字符串,然后使用 for 循环附加每个字符,byte您可以使用ByteBufferCharBuffer为您完成提升:

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

NB 使用 UTF 字符集

或者使用 String 构造函数:

String text = new String(bytes, 0, bytes.length, "ASCII");
于 2014-08-13T09:54:49.213 回答
3
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();
}
于 2019-07-15T14:52:45.010 回答
1

反过来(“info”是输入文本,“s”是二进制版本)

byte[] bytes = info.getBytes();
BigInteger bi = new BigInteger(bytes);
String s = bi.toString(2); 
于 2010-11-18T04:51:36.020 回答
1

这是答案。

private String[] splitByNumber(String s, int size) {
    return s.split("(?<=\\G.{"+size+"})");
}
于 2012-08-14T17:39:15.113 回答
0

parseInt功能。您可能还需要演员表和Character.toString功能。

于 2010-11-18T04:37:45.980 回答
0

您也可以使用没有流和正则表达式的替代解决方案(基于 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();
}

您只需要将指定的字符作为字符串附加到字符序列

于 2020-05-13T01:06:07.023 回答