2011-03-28 87 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