2010-11-13 10 views
10

Chcę uzyskać plik binarny (011001 ..) z łańcucha, ale zamiast tego otrzymuję [B @ addbf1, musi to być łatwa transformacja, ale nie widzę tego.Łańcuch do wyjścia binarnego w Javie

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(); 
} 

Oto ja dostać infoBin: [B @ addbf1
i chciałbym infoBin: 01001 ...

Każda pomoc będzie mile widziane, dzięki!

+2

wygląda, że oczekujesz, że bity zostaną wydrukowane, a nie bajty. – akf

Odpowiedz

18

Tylko Integer ma metodę konwersji do binarnej reprezentacji smyczkowy to sprawdzić:

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)); 
     } 
    } 
} 

by wydrukować:

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 

padding:

String bin = Integer.toBinaryString(b); 
if (bin.length() < 8) 
    bin = "0" + bin; 
+0

może potrzebujesz trochę wyściółki dla swoich bajtów – stacker

+0

Dziękuję bardzo za pomoc! – Nick

+0

@stacker, dlaczego przestrzeń jest endodowana tylko na 6 cyfrach, a nie na 7? (np .: c: -> 100000) – Nick

1

Podczas próby użycia + z obiektem w kontekście tekstowym kompilator java w trybie cichym wstawia wywołanie metody toString().

Innymi słowy wasze wypowiedzi wyglądać

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

która w tym przypadku jest jeden dziedziczone z obiektu.

Będziesz musiał użyć pętli for, aby wybrać każdy bajt z tablicy bajtów.

4

Tablice nie mają sensownego nadpisania toString, więc używają domyślnej notacji obiektu.

Zmień swój ostatni wiersz

return Arrays.toString(infoBin); 

a otrzymasz oczekiwany wynik.

+0

Cześć Andrzej, twoja odpowiedź ma sens, ale dostaję [84, 104, 105, 115, 32, 105, 115, 32, 97, 32, ..] zamiast (01101010 ...) jakieś sugestie? dziękuję – Nick

Powiązane problemy