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

58 java

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

Boh*_*ian 198

怎么样Arrays.toString(byteArray)

这是一些可编译的代码:

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

输出:

[-1, -128, 1, 127]
Run Code Online (Sandbox Code Playgroud)

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

  • 在 Kotlin 中是 `byteArray.contentToString()` (5认同)

Pet*_*rey 22

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

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

  • 不推荐使用构造函数String(byte [],int).使用String(byte [],Charset)代替,例如new String(bytes,Charset.forName("ISO-8859-1")). (12认同)

Jon*_*eet 18

好吧,如果你很高兴用十进制打印它,你可以通过屏蔽使它成为积极的:

int positive = bytes[i] & 0xff;
Run Code Online (Sandbox Code Playgroud)

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


Vin*_*ati 10

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


alp*_*ero 7

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

得到你

1 -2 5 66 
Run Code Online (Sandbox Code Playgroud)


Rob*_*ust 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();
}
Run Code Online (Sandbox Code Playgroud)

例:

 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));
 }
Run Code Online (Sandbox Code Playgroud)

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