二进制到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
函数。