【问题标题】:How to print the data in byte array as characters?如何将字节数组中的数据打印为字符?
【发布时间】:2011-09-21 18:11:06
【问题描述】:

在我的字节数组中,我有一个消息的 hash 值,它由一些负值和正值组成。使用(char)byte[i] 语句可以轻松打印正值。

现在我怎样才能得到负值?

【问题讨论】:

标签: java arrays


【解决方案1】:

Arrays.toString(byteArray)怎么样?

这是一些可编译的代码:

byte[] byteArray = new byte[] { -1, -128, 1, 127 };
System.out.println(Arrays.toString(byteArray));

输出:

[-1, -128, 1, 127]

为什么要重新发明轮子...

【讨论】:

  • 在 Kotlin 中是 byteArray.contentToString()
【解决方案2】:

如果要将字节打印为字符,可以使用 String 构造函数。

byte[] bytes = new byte[] { -1, -128, 1, 127 };
System.out.println(new String(bytes, 0));

【讨论】:

  • 不推荐使用构造函数 String(byte[], int)。请改用 String(byte[], Charset),例如 new String(bytes, Charset.forName("ISO-8859-1"))。
【解决方案3】:

好吧,如果您愿意以十进制打印它,您可以通过掩码将其设为正数:

int positive = bytes[i] & 0xff;

如果您要打印哈希,则使用十六进制会更传统。在 Java 中,关于将二进制数据转换为十六进制字符串的 Stack Overflow 寻址还有很多其他问题。

【讨论】:

    【解决方案4】:

    试试看:

    public static String print(byte[] bytes) {
        StringBuilder sb = new StringBuilder();
        sb.append("[ ");
        for (byte b : bytes) {
            sb.append(String.format("0x%02X ", b));
        }
        sb.append("]");
        return sb.toString();
    }
    

    例子:

     public static void main(String []args){
        byte[] bytes = new byte[] { 
            (byte) 0x01, (byte) 0xFF, (byte) 0x2E, (byte) 0x6E, (byte) 0x30
        };
    
        System.out.println("bytes = " + print(bytes));
     }
    

    输出:bytes = [ 0x01 0xFF 0x2E 0x6E 0x30 ]

    【讨论】:

    • 如果您想将字符打印为 hex,这是更好的选择之一。
    • 看起来像是将它们打印为数字
    • 感谢您的帮助。我需要打印类似于 HexDump 的内容。我认为您的解决方案是最适合我的情况的解决方案!
    【解决方案5】:

    试试这个:new String(byte[])

    【讨论】:

      【解决方案6】:
      byte[] buff = {1, -2, 5, 66};
      for(byte c : buff) {
          System.out.format("%d ", c);
      }
      System.out.println();
      

      得到你

      1 -2 5 66 
      

      【讨论】:

        【解决方案7】:

        在 Kotlin 中你可以使用:

        println(byteArray.contentToString())

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-24
          • 1970-01-01
          • 2015-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-23
          相关资源
          最近更新 更多