Строка для двоичного вывода в Java
Я хочу получить двоичный код (011001..) из String, но вместо этого я получаю [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();
}
Здесь я получаю infoBin: [B @addbf1
и я хотел бы infoBin: 01001...
Любая помощь будет оценена, спасибо!
Ответы
Ответ 1
Только 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;
Ответ 2
Массивы не имеют разумного переопределения toString
, поэтому они используют обозначение объекта по умолчанию.
Измените свою последнюю строку на
return Arrays.toString(infoBin);
и вы получите ожидаемый результат.
Ответ 3
Когда вы пытаетесь использовать +
с объектом в контексте строки, java-компилятор молча вставляет вызов методу toString().
Другими словами, ваши утверждения выглядят как
System.out.println("infobin: " + infoBin.toString())
который в этом случае является унаследованным от Object.
Вам нужно будет использовать цикл for для выбора каждого байта из массива байтов.