Строка для двоичного вывода в Java - PullRequest
10 голосов
/ 13 ноября 2010

Я хочу получить двоичный (011001 ..) из строки, но вместо этого я получаю [B @ addbf1, должно быть простое преобразование, чтобы сделать это, но я не вижу его.

public static String toBin(String info){
  byte[] infoBin = null;
  try {
   infoBin = info.getBytes( "UTF-8" );
   System.out.println("infoBin: "+infoBin);
  }
  catch (Exception e){
   System.out.println(e.toString());
  }
  return infoBin.toString();
}

Здесь я получаю инфобин: [B @ addbf1
и я хотел бы infoBin: 01001 ...

Любая помощь будет оценена, спасибо!

Ответы [ 3 ]

18 голосов
/ 13 ноября 2010

Только у Integer есть метод для преобразования в двоичное представление строки. Проверьте это:

import java.io.UnsupportedEncodingException;

public class TestBin {
    public static void main(String[] args) throws UnsupportedEncodingException {
        byte[] infoBin = null;
        infoBin = "this is plain text".getBytes("UTF-8");
        for (byte b : infoBin) {
            System.out.println("c:" + (char) b + "-> "
                    + Integer.toBinaryString(b));
        }
    }
}

выдаст:

c:t-> 1110100
c:h-> 1101000
c:i-> 1101001
c:s-> 1110011
c: -> 100000
c:i-> 1101001
c:s-> 1110011
c: -> 100000
c:p-> 1110000
c:l-> 1101100
c:a-> 1100001
c:i-> 1101001
c:n-> 1101110
c: -> 100000
c:t-> 1110100
c:e-> 1100101
c:x-> 1111000
c:t-> 1110100

Заполнение:

String bin = Integer.toBinaryString(b); 
if ( bin.length() < 8 )
  bin = "0" + bin;
4 голосов
/ 13 ноября 2010

Массивы не имеют разумного переопределения toString, поэтому они используют обозначение объекта по умолчанию.

Измените последнюю строку на

return Arrays.toString(infoBin);

, и вы получите ожидаемый результат.

1 голос
/ 13 ноября 2010

Когда вы пытаетесь использовать + с объектом в строковом контексте, компилятор Java молча вставляет вызов метода toString ().

Другими словами, ваши операторы выглядят как

System.out.println("infobin: " + infoBin.toString())

, который в данном случае является наследуемым от Object.

Вам понадобится цикл for для выбора каждого байта из массива байтов.

...