2011-06-24 8 views
42

W mojej tablicy bajtów mam wartości mieszania wiadomości, która składa się z niektórych wartości ujemnych, a także wartości dodatnich. Wartości dodatnie są drukowane w łatwy sposób przy użyciu instrukcji (char)byte[i]. Teraz w jaki sposób można uzyskać wartość ujemnąjak wydrukować dane w tablicy bajtowej jako znaki

+0

Co prawda przez przez "jako znaki" dokładnie? Dziesiętny? Hex: http://stackoverflow.com/questions/9655181/convert-from-byte-array-to-hex-string-in-java –

Odpowiedz

17

Dobrze jeśli jesteś zadowolony drukując je po przecinku, można po prostu sprawiają, że pozytywny przez maskowanie:

int positive = bytes[i] & 0xff; 

Jeśli drukowanie hash choć go byłoby bardziej konwencjonalne użycie heksów. Istnieje wiele innych pytań na temat przepełnienia stosu, dotyczących konwersji danych binarnych na ciąg szesnastkowy w Javie.

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

dostaje

1 -2 5 66 
139

Jak o Arrays.toString(byteArray)?

Oto niektóre compilable Kod:

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

wyjściowa:

[-1, -128, 1, 127] 

Dlaczego ponownie wymyślać koła ...

16

Jeśli chcesz wydrukować bajtów jak zwęgla można użyć Konstruktor String.

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

Konstruktor String (byte [], int) jest przestarzały. Zamiast tego użyj String (byte [], Charset), na przykład new String (bytes, Charset.forName ("ISO-8859-1")). –

9

Spróbuj tego: new String(byte[])

1

Spróbuj:

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

Przykład:

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

wyjściowa: bytes = [ 0x01 0xFF 0x2E 0x6E 0x30 ]

Powiązane problemy