2011-03-28 85 views
0

嗨 我想寫一個程序,將用戶輸入的二進制文件轉換爲文本字符串。我碰到了一些障礙,我可以讓我的程序將「01110110」轉換爲「v」,但是一旦我嘗試像「0110100001101001」這樣的東西,它會給我符號而不是「hi」。以下是我正在使用的源代碼。 P.s感謝您的幫助,仍然試圖掌握Java。二進制字符串故障

import javax.swing.JOptionPane; 




public class Binarytotext 
{ 
    public static void main(String arg[]) 
    { 

      String b = JOptionPane.showInputDialog(null,"Enter binary"); 
      int charCode = Integer.parseInt(b,2); 
      String k = new Character((char)charCode).toString(); 
      JOptionPane.showMessageDialog(null,k); 

    } 

} 

回答

1

如果字符串中有8位以上,則需要進行分解和獨立分析每個8位段,如:

int charCode; 
String k = ""; 
String b = JOptionPane.showInputDialog(null,"Enter binary"); 
while (b.length > 8) { 
    charCode = Integer.parseInt(b.substring(0, 8),2); 
    k += new Character((char)charCode).toString(); 
    b = b.substring(8); 
} 
if (b.length() > 0) { 
    //attempt handle any trailing bits that might be left 
    charCode = Integer.parseInt(b,2); 
    k += new Character((char)charCode).toString(); 
} 

JOptionPane.showMessageDialog(null,k); 
+0

感謝您的幫助 – dfair 2011-03-28 04:46:42

+0

好的工作解決方案,但我不能upvote這是因爲你正在使用字符串在循環中連接,這是最終的邪惡 – 2011-03-28 04:59:01

+0

@Sean - 只有在處理大字符串時s或大量的循環迭代。對於這樣一個簡單的例子,沒有實際的區別。此外,OP正在嘗試學習Java的基礎知識,所以如果我不是爲了解決問題而嚴格要求改變他的代碼,那麼它可能沒有什麼幫助。性能優化課程可能會晚一些。 – aroth 2011-03-28 05:16:32

3

您正在將16個0和1的整個序列轉換爲一個整數。您需要先將它分成8個字符的子字符串(每個8位是一個字節,每個字節是一個ASCII字符)。

+0

謝謝你,我的問題的固定部分現只是想弄清楚如何讓我的程序接受空間而不會炸燬我的臉.lol – dfair 2011-03-28 04:38:17

+0

感謝您的幫助 – dfair 2011-03-28 04:47:20

0
String input = JOptionPane.showInputDialog(null, "Enter binary"); 
String out = ""; 
while (input.length() >= 8) { 
    out += (char) Integer.parseInt(input.substring(0, 8), 2); 
    input = input.substring(8); 
} 
JOptionPane.showMessageDialog(null, out); 
+0

謝謝你的幫助 – dfair 2011-03-28 04:47:13