如何将字节数组中的数据打印为字符

时间:2011-06-24 05:00:13

标签: java

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

6 个答案:

答案 0 :(得分:187)

Arrays.toString(byteArray)怎么样?

以下是一些可编辑的代码:

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

输出:

[-1, -128, 1, 127]

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

答案 1 :(得分:18)

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

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

答案 2 :(得分:17)

如果你喜欢用十进制打印它,那么你可以通过屏蔽来使它变得正面:

int positive = bytes[i] & 0xff;

如果您打印出哈希值,那么使用hex会更常规。 Stack Overflow上有很多其他问题,用于将二进制数据转换为Java中的十六进制字符串。

答案 3 :(得分:8)

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

答案 4 :(得分:7)

试一试:

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 ]

答案 5 :(得分:6)

byte[] buff = {1, -2, 5, 66};
for(byte c : buff) {
    System.out.format("%d ", c);
}
System.out.println();

让你

1 -2 5 66