【问题标题】:How to convert a binary string back into a string如何将二进制字符串转换回字符串
【发布时间】:2014-04-15 11:36:24
【问题描述】:

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

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

【问题讨论】:

  • 有人刚刚发布了回复,然后将其删除。但它奏效了。谢谢你。你能告诉我如何得到一个字符串......因为我可以得到一个像“c”或“h”这样的字符,但是我如何把“ch”放在一起?

标签: java string binary binarystream


【解决方案1】:

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

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

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

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

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

【讨论】:

  • 成功了。谢谢你。你能告诉我如何得到一个字符串......因为我可以得到一个像“c”或“h”这样的字符,但是我如何把“ch”放在一起? @Keppil
  • @Manika:更新了一些关于如何拆分字符串的指针。
【解决方案2】:

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

int chars = Integer.parseInt(wm, 2);
String str = new Character((char)chars).toString();

【讨论】:

  • 我只是得到一个奇怪的符号......当我执行上述操作时,一个带有 4 个数字的小方块。 @JN11
【解决方案3】:

您附加 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));
}

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

【讨论】:

    【解决方案4】:

    将字符转换为二进制时需要考虑的一件事,以确保用零填充左侧,使二进制长度为 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
    

    【讨论】:

      猜你喜欢
      • 2021-05-09
      • 1970-01-01
      • 2012-01-08
      • 2016-08-21
      • 2015-01-20
      • 2014-08-02
      • 2017-08-08
      • 2016-02-20
      • 1970-01-01
      相关资源
      最近更新 更多