2010-11-18 164 views
6

我有一個帶有二進制數據的字符串(1110100)我想讓文本出來,所以我可以打印它(1110100會打印「t」)。我想這一點,這是類似於我用我的文字轉換成二進制,但它不工作:Java中文本的二進制文件

public static String toText(String info)throws UnsupportedEncodingException{ 
     byte[] encoded = info.getBytes(); 
     String text = new String(encoded, "UTF-8"); 
     System.out.println("print: "+text); 
     return text; 
    } 

任何更正或建議,將不勝感激。

謝謝!

回答

24

可以使用Integer.parseInt與2(二進制)基數爲二進制字符串轉換爲整數:如果你想對應的字符作爲字符串

int charCode = Integer.parseInt(info, 2); 

然後:

String str = new Character((char)charCode).toString(); 
+0

謝謝,它有很多意義,但我不明白如何從一個int(charCode) – Nick 2010-11-18 04:51:59

+2

@Nick創建一個新的字符:只需將其轉換爲'char'。 – casablanca 2010-11-18 04:54:05

+0

非常感謝你! – Nick 2010-11-18 04:57:28

1

反過來(其中「info」是輸入文本,「s」是它的二進制版本)

byte[] bytes = info.getBytes(); 
BigInteger bi = new BigInteger(bytes); 
String s = bi.toString(2); 
1

這是答案。

private String[] splitByNumber(String s, int size) { 
    return s.split("(?<=\\G.{"+size+"})"); 
} 
4

我知道OP表示,他們的二進制是一個String格式,但對於完整性的考慮,我想我會添加一個解決方案,直接從byte[]轉換爲字母字符串表示。

As 卡薩布蘭卡聲明你基本上需要獲得字母字符的數字表示。如果您試圖轉換長度超過一個字符的任何東西,它可能會以byte[]的形式出現,而不是將其轉換爲字符串,然後使用for循環附加每個byte的字符,您可以使用ByteBufferCharBuffer進行擡起爲您提供:

public static String bytesToAlphabeticString(byte[] bytes) { 
    CharBuffer cb = ByteBuffer.wrap(bytes).asCharBuffer(); 
    return cb.toString(); 
} 

NB使用UTF字符集

或者使用String構造:

String text = new String(bytes, 0, bytes.length, "ASCII"); 
1

這是我的一個(關於Java 8做工精細):

String input = "01110100"; // Binary input as String 
StringBuilder sb = new StringBuilder(); // Some place to store the chars 

Arrays.stream(// Create a Stream 
    input.split("(?<=\\G.{8})") // Splits the input string into 8-char-sections (Since a char has 8 bits = 1 byte) 
).forEach(s -> // Go through each 8-char-section... 
    sb.append((char) Integer.parseInt(s, 2)) // ...and turn it into an int and then to a char 
); 

String output = sb.toString(); // Output text (t) 

和壓縮方法打印到控制檯:

Arrays.stream(input.split("(?<=\\G.{8})")).forEach(s -> System.out.print((char) Integer.parseInt(s, 2))); 
System.out.print('\n'); 

我確定有「下注ter「的方式來做到這一點,但這是你可能得到的最小的一個。