0

这是我想要做的。我有一个字符串:

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”作为输出。任何人都可以帮忙吗?

4

4 回答 4

0

您可以将二进制字符串解析为intwith Integer#parseInt(String s, int radix),然后将其转换为 a char

char result = (char) Integer.parseInt(s, 2);

编辑 您的字符串将如下所示:

0011000111101000
00<--c--><--h-->

要获得ch分开,您需要拆分String. 尝试使用String#substring()来获取属于不同字母的字符串部分。所有小写​​字母都是 7 位数字,所以应该不会太难。

于 2014-04-15T11:39:14.223 回答
0

您可以使用该Integer.parseInt方法将其转换为int,但您必须提及基数(2)。之后,您可以将其转换intString. 像这样:

int chars = Integer.parseInt(wm, 2);
String str = new Character((char)chars).toString();
于 2014-04-15T11:51:33.140 回答
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));
}

可能还有其他聪明的方法,但这是我能想到的。

于 2014-04-16T12:00:50.423 回答
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)))

您正在使用 aStringBuilder来构建二进制字符串,因此您可以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
于 2015-06-05T19:42:08.983 回答