2010-11-13 6 views
10

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

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 ...

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

+2

это выглядит, что вы ожидаете, что биты будут напечатаны, а не байты. – akf

ответ

18

только 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; 
+0

, может быть, вам понадобится прокладка для ваших байтов – stacker

+0

Большое спасибо за вашу помощь! – Nick

+0

@stacker Почему пространство закодировано только на 6 цифр, а не на 7? (например: c: -> 100000) – Nick

1

При попытке использовать + с объектом в контексте строки java-компилятор молча вставляет вызов методу toString().

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

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

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

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

4

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

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

return Arrays.toString(infoBin); 

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

+0

Привет Анджей, ваш ответ имеет большой смысл, но я получаю [84, 104, 105, 115, 32, 105, 115, 32, 97, 32, ..] вместо (01101010 ...) любые предложения? спасибо – Nick

 Смежные вопросы

  • Нет связанных вопросов^_^