【问题标题】:String to byte[] and byte[] to String [duplicate]字符串到字节 [] 和字节 [] 到字符串 [重复]
【发布时间】:2016-03-28 22:07:08
【问题描述】:

我正在处理一些将 String 转换为 byte[] 的代码,然后从 byte[] 转换为 String(一个 String,它是原始 String 的二进制表示),然后我打算做一些事情那个字符串。
当我尝试将字符串转换为 byte[] 并将 byte[] 转换为原始字符串时,有些东西不起作用。

        byte[] binary = "Example".getBytes(StandardCharsets.UTF_8);
        String x = new String();
        for(byte b : binary)
        {
                x += Integer.toBinaryString(b);
        }
        byte[] b = new byte[x.length()];
        for (int i = 0; i < b.length; i++) 
        {
            b[i] = (byte) (x.charAt(i) - '0');
        }
        String str = new String(b, StandardCharsets.UTF_8);
        System.out.println(str);

正如您在该代码中看到的那样,我正在使用一个名为“Example”的示例字符串,并且我正在尝试执行我上面写的操作。
当我打印 str 时,我没有得到那个“示例”字符串。
有谁知道这样做的方法?我在 Stack Overflow 上搜索了解决方案,但我找不到解决方案。

【问题讨论】:

  • 你试过 Arrays.toString(byte[] ) 将字节转换为字符串吗?
  • x += Integer.toBinaryString(b); 将是 x += "1000101"; 字符'E' (=ascii 69)
  • @JörnBuitink 是的,但是我如何将该二进制字符串重新转换为原始字符串“示例”?
  • 这是关键点:我有一个二进制字符串(如您所说,字符“E”的示例“100101”),我必须使用该二进制字符串显示回“E”

标签: java string binary byte


【解决方案1】:

这应该可以在没有中间部分的情况下工作。

byte[] binary = "Example".getBytes(StandardCharsets.UTF_8);
String str = new String(binary, StandardCharsets.UTF_8);
System.out.println(str);

【讨论】:

  • 不。我说我打算用那个 byte[] 数组做点什么,所以我不能删除那个中间部分。
  • 那么真正的问题是你想用它做什么?因为那个突变操作是导致字符串改变的原因。
  • 我正在实现类似密码的东西,所以我必须对字符串的二进制表示做一些事情,然后再次获取字符串的二进制表示,这样我才能获得原始字符串。跨度>
  • 哦。现在我懂了。您正在转换一个字符串 -> byte[] -> 1s 和 0s 的字符串 -> byte[] ,其中每个元素都是 1s 和 0s 字符串的位 -> 字符串。如果要将第二个 byte[] 转换回字符串,则需要使用位移来使第二个 byte[] 成为字节,而不仅仅是位。
  • 你能发布一些代码示例吗?我将不胜感激!
猜你喜欢
  • 2019-02-22
  • 2016-03-09
  • 2018-05-01
  • 2022-01-18
  • 2011-12-14
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
  • 2020-02-14
相关资源
最近更新 更多