有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将字节[]转换为字符串

我有一个byte[]类型的bytearray,长度为17字节,我想将其转换为字符串,并希望将此字符串用于另一个比较,但我得到的输出不是要验证的格式,我使用以下方法进行转换。我想输出为易于验证的字符串,并给出相同的字符串进行比较

    byte[] byteArray = new byte[] {0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0};
    String value = new String(byteArray);
    System.out.println(value);

输出:���{nY


共 (5) 个答案

  1. # 1 楼答案

    它实际上是编码文本吗?如果是,请指定编码

    然而,你得到的数据看起来不像是文本。在我看来,它就像是任意的二进制数据。如果它不是真正的文本,我建议根据需要将其转换为十六进制或base64。有一个很好的public domain base64 encoder你可以用

    String text = Base64.encodeBytes(byteArray);
    

    和解码:

    byte[] data = Base64.decode(text):
    
  2. # 2 楼答案

    我不能百分之百肯定你说的对不对。这是你想要的吗

    String s = null;
    StringBuffer buf = new StringBuffer("");
    byte[] byteArray = new byte[] {0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0};
    for(byte b : byteArray) {
      s = String.valueOf(b);
      buf.append(s + ",");
    }
    String value = new String(buf);
    System.out.println(value);
    
  3. # 3 楼答案

    也许您应该指定一个字符集:

    String value = new String(byteArray, "UTF-8");
    
  4. # 4 楼答案

    它是什么编码?您应该明确定义它:

    new String(byteArray, Charset.forName("UTF-32"));  //or whichever you use
    

    否则,结果是不可预测的(从^{}构造函数JavaDoc):

    Constructs a new String by decoding the specified array of bytes using the platform's default charset

    顺便说一句,我刚刚用UTF-8、UTF-16和UTF-32试过——都会产生虚假的结果。一长串的0让我相信这实际上不是一个文本。你从哪里得到这些数据

    更新:我已使用机器上可用的所有字符集进行了尝试:

    for (Map.Entry<String, Charset> entry : Charset.availableCharsets().entrySet())
    {
        final String value = new String(byteArray, entry.getValue());
        System.out.println(entry.getKey() + ": " + value);
    }
    

    而且没有编码产生任何接近人类可读文本的东西。。。您的输入不是文本

  5. # 5 楼答案

    使用方法如下:

    byte[] byteArray = new byte[] {0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0};
    String value = Arrays.toString(byteArray);
    System.out.println(value);
    

    您的输出将是

    [0,127,-1,-2,-54,123,12,110,89,0,0,0,0,0,0,0,0]