二进制到Java中的文本

我有一个带有二进制数据的string(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; } 

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

谢谢!

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

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

那么如果你想把相应的字符作为一个string:

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

我知道OP说他们的二进制文件是String格式,但为了完整性,我想我会添加一个解决scheme,直接从byte[]转换为字母string表示。

正如卡萨布兰卡所说,你基本上需要获得字母字符的数字表示。 如果您试图转换任何长度超过一个字符,它可能会来作为一个byte[] ,而不是将其转换为string,然后使用for循环来追加每个byte的字符,你可以使用ByteBuffer和CharBuffer做为你解除:

 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"); 

这是答案。

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

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

我相信有更好的方法来做到这一点,但这是你可能得到的最小的一个。

反过来说(其中“info”是input文本,“s”是它的二进制版本)

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

看看parseInt函数。 您可能还需要一个强制转换和Character.toString函数。