我有一个包含二进制数据的字符串(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;
}
非常感谢任何更正或建议。
谢谢!
答案 0 :(得分:26)
您可以使用基数为2(二进制)的Integer.parseInt
将二进制字符串转换为整数:
int charCode = Integer.parseInt(info, 2);
然后,如果您想将相应的字符作为字符串:
String str = new Character((char)charCode).toString();
答案 1 :(得分:4)
我知道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");
答案 2 :(得分:3)
这是我的(在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');
我确信有更好的&#34;这样做的方法,但这是你可能得到的最小的。
答案 3 :(得分:1)
相反(其中“info”是输入文本,“s”是二进制版本)
byte[] bytes = info.getBytes();
BigInteger bi = new BigInteger(bytes);
String s = bi.toString(2);
答案 4 :(得分:1)
这是答案。
private String[] splitByNumber(String s, int size) {
return s.split("(?<=\\G.{"+size+"})");
}
答案 5 :(得分:0)
查看parseInt
函数。您可能还需要演员和Character.toString
功能。
答案 6 :(得分:0)
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();
}
答案 7 :(得分:0)
您还可以使用没有流和正则表达式(based on casablanca's answer)的替代解决方案:
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();
}
您只需要append指定的字符作为字符序列的字符串即可。