这是我想要做的。 我有一个字符串:
String s="ch"
我按以下方式将其转换为二进制字符串
char ar[]=s.toCharArray();
StringBuilder sb= new StringBuilder("00"); /* i am appending to extra zeros because
when i convert "ch" to binary string it
consists of 14 characters(0s and 1s) and i
need them to be a multiple of 8, so i add 2
0s to make it 16)*/
String wm=" ";
for(char c:ar)
{
wm=Integer.toBinaryString((int)c);
sb.append(wm);
}
现在我想将这个二进制字符串转换回字符...这样我就会得到“ch”作为输出。有人可以帮忙吗?
答案 0 :(得分:0)
您可以使用Integer#parseInt(String s, int radix)
将二进制字符串解析为int
,然后将其转换为char
:
char result = (char) Integer.parseInt(s, 2);
修改强> 你的字符串将如下所示:
0011000111101000
00<--c--><--h-->
要分别获取c
和h
,您需要拆分String
。尝试使用String#substring()
来获取属于不同字母的字符串部分。所有小写字母都是7位数字,所以它不应该太难。
答案 1 :(得分:0)
附加0的方式不正确。它缩短两个0的原因是当c和h转换为二进制时,c变为1100011.但是,它应该是01100011因为我们正在查看一个字节所以你需要左边填充每个二进制字符串而不是0的最后一个字符串。
您的最终字符串应为0110001101101000而不是0011000111101000。
一旦正确构造了二进制字符串,就可以使用以下代码将其转换回字符串。
StringBuilder result = new StringBuilder();
for(int i = 0; i < binaryStr.length(); i += 8){
result.append((char)Integer.parseInt(binaryStr.substring(i, i + 8), 2));
}
可能有其他聪明的方法,但这是我能想到的。
答案 2 :(得分:0)
当您将字符转换为二进制文件时要考虑的一件事是确保向左填充零,以便二进制文件的长度为8位。这可以通过以下方式实现:
// "%08d" will pad zeroes to the left if it's not 8 in length
String.format("%08d", Integer.parseInt(Integer.toBinaryString((int)c)))
您正在使用StringBuilder
来构建二进制字符串,因此您可以使用上面的String.format()
:
String s = "ch";
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
sb.append(String.format("%08d", Integer.parseInt(Integer.toBinaryString((int)c))));
}
System.out.println(sb);
结果:
|--c---||--h---|
0110001101101000
它的反向(二进制到字符)将是:
for (int i = 0; i < sb.length(); i += 8) {
System.out.print((char)Integer.parseInt(sb.substring(i, i + 8), 2));
}
System.out.println();
结果:
ch
一起看起来像是:
public static void main(String[] args) throws Exception {
String s = "ch";
StringBuilder sb = new StringBuilder();
for (char c : s.toCharArray()) {
sb.append(String.format("%08d", Integer.parseInt(Integer.toBinaryString((int)c))));
}
System.out.println(sb);
for (int i = 0; i < sb.length(); i += 8) {
System.out.print((char)Integer.parseInt(sb.substring(i, i + 8), 2));
}
System.out.println();
}
结果:
0110001101101000
ch