Wie drucke ich die Daten im Byte-Array als Zeichen?

73

In meinem Byte-Array habe ich die Hash- Werte einer Nachricht, die aus einigen negativen und auch positiven Werten besteht. Positive Werte können mithilfe der (char)byte[i]Anweisung problemlos gedruckt werden .

Wie kann ich nun den negativen Wert erhalten?

informatik01
quelle
Was genau meinst du mit "als Charaktere"? Dezimal? Hex: stackoverflow.com/questions/9655181/…
Ciro Santilli 2 冠状 病 六四 事件 2

Antworten:

22

Wenn Sie es gerne dezimal drucken, können Sie es einfach durch Maskieren positiv machen:

int positive = bytes[i] & 0xff;

Wenn Sie jedoch einen Hash ausdrucken, ist es herkömmlicher, Hex zu verwenden. Es gibt viele andere Fragen zum Stapelüberlauf, die sich mit der Konvertierung von Binärdaten in eine Hex-Zeichenfolge in Java befassen.

Jon Skeet
quelle
238

Wie wäre es Arrays.toString(byteArray)?

Hier ist ein kompilierbarer Code:

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

Ausgabe:

[-1, -128, 1, 127]

Warum das Rad neu erfinden ...

Böhmisch
quelle
4
In Kotlin ist esbyteArray.contentToString()
Vlad
23

Wenn Sie die Bytes als Zeichen drucken möchten, können Sie den String-Konstruktor verwenden.

byte[] bytes = new byte[] { -1, -128, 1, 127 };
System.out.println(new String(bytes, 0));
Peter Lawrey
quelle
12
Der Konstruktor String (byte [], int) ist veraltet. Verwenden Sie stattdessen String (Byte [], Charset), z. B. einen neuen String (Bytes, Charset.forName ("ISO-8859-1")).
Klas Lindbäck
15

Versuch es:

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();
}

Beispiel:

 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));
 }

Ausgabe: bytes = [ 0x01 0xFF 0x2E 0x6E 0x30 ]

Robust
quelle
1
Dies ist eine der besseren Optionen, wenn Sie die Zeichen als Hex drucken möchten .
Per Lundberg
11

Probier diese : new String(byte[])

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

holt dich

1 -2 5 66 
Alphazero
quelle