Подтвердить что ты не робот

Как печатать данные в массиве байтов как символы

В моем байтовом массиве у меня есть хэш-значения сообщения, которое состоит из некоторых отрицательных значений, а также положительных значений. Положительные значения печатаются легко, используя оператор (char)byte[i]. Теперь, как я могу получить отрицательное значение

4b9b3361

Ответ 1

Хорошо, если вы счастливы печатать его в десятичной форме, вы можете просто сделать его положительным, маскируя:

int positive = bytes[i] & 0xff;

Если вы печатаете хэш, было бы более условно использовать hex. Есть много других вопросов по адресу Stack Overflow, конвертирующих двоичные данные в шестнадцатеричную строку в Java.

Ответ 2

Как насчет Arrays.toString(byteArray)?

Вот некоторые компилируемые коды:

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

Вывод:

[-1, -128, 1, 127]

Зачем изобретать колесо...

Ответ 3

Если вы хотите напечатать байты как символы, вы можете использовать конструктор String.

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

Ответ 4

Попробуйте следующее: new String(byte[])

Ответ 5

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

получает вас

1 -2 5 66 

Ответ 6

Попробуйте:

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 ]