Преобразовать байт [] в строку - PullRequest
2 голосов
/ 02 февраля 2011

Есть ли простой способ вывести массив byte[] (нули и единицы, в основном для каждого бита, преобразованного в ascii '1' или ascii '0') в консоль?

Ответы [ 4 ]

7 голосов
/ 02 февраля 2011

Вы можете вывести отдельные байты, преобразовав их числовое значение в основание 2. Вот два способа сделать это.В обоих случаях я буду использовать этот байтовый массив:

byte[] array = "HälLø123§$%".getBytes();

Обойти массив

for(final byte b : array){
    System.out.print(Integer.toString(b & 0xFF /* thx Jason Day */, 2));
}

Вывод:

1001000110000111010010011011001001100110000111011100011000101100100110011011000001011012 *

Ссылка:

Использовать BigInteger

Если вы хотите вывести весь массив целиком, используйте BigInteger:

System.out.println(new BigInteger(array).toString(2));

Вывод:

100100011000011101001000110110001001100110000111011100000110001001100100011001111000001010011100001010100111001000000101

Ссылка:

3 голосов
/ 02 февраля 2011

Если вы хотите распечатать двоичное представление каждого элемента, вы можете сделать что-то вроде этого:

StringBuilder sb = new StringBuilder();
sb.append("[");
String comma = "";
for (byte b : array) {
    int i = b & 0xFF; // cast to int and mask the sign bit
    sb.append(comma);
    comma = ",";
    sb.append(Integer.toBinaryString(i));
}
sb.append("]");

System.out.println(sb.toString());
3 голосов
/ 02 февраля 2011

Можно использовать commons-codec BinaryCodec:

BinaryCodec.toAsciiString(array)

Для лучшего контроля на выходе вы можете использовать toAsciiChars(..) и распечатать char[].

(если вы просто хотите вывести значения массива - java.util.Arrays.toString(array));

2 голосов
/ 03 февраля 2011

Примечание: Выводит отдельные байты, а не отдельные биты.Но поскольку это может все еще быть полезным для кого-то, я позволю это здесь.


Здесь решение для моего понимания вопроса:

byte[] data = {0, 1, 0, 1, 1, 0};
StringBuilder sb = new StringBuilder(data.length);
for(byte b : data) {
    sb.append(b);
}
System.out.println(sb);

Это должно вывести 010110.

...