2010-11-13 51 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 2010-11-13 18:11:17

回答

18

只有整數必須轉換成二進制字符串表示檢查了這一點的方法:

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 2010-11-13 18:23:03

+0

非常感謝你的幫助! – Nick 2010-11-13 18:53:44

+0

@stacker爲什麼只有6位數字而不是7位空間? (例如:C: - > 100000) – Nick 2010-11-17 21:27:59

1

當您嘗試將+與字符串上下文中的對象一起使用時,java編譯器會靜靜地向toString()方法插入一個調用。

換句話說,你的報表看起來像

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

在這種情況下是從Object繼承的一個。

您將需要使用for-loop從字節數組中挑出每個字節。

4

數組沒有明智的toString重寫,所以它們使用默認的對象表示法。

你的最後一行更改爲

return Arrays.toString(infoBin); 

,你會得到預期的輸出。

+0

嗨Andrzej,你的回答很有道理,但我得到[84,104,105,115,32,105,115,32,97,32,..]而不是(01101010 ...)有什麼建議?謝謝 – Nick 2010-11-13 18:16:41