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

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

那么如果你很高兴用十进制打印它,你可以通过屏蔽来使它正确:

 int positive = bytes[i] & 0xff; 

如果你正在打印一个散列,那么使用hex将会更加传统。 关于堆栈溢出寻址将二进制数据转换为Java中的hexstring还有很多其他问题。

如何Arrays.toString(byteArray)

这是一些可编译的代码:

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

输出:

 [-1, -128, 1, 127] 

为什么重新发明轮子…

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

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

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

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

得到你

 1 -2 5 66 

尝试一下:

 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 ]