如何在Java中将二进制转换为文本?

3

可能重复:
Java中的二进制转文本

我正在编写一个可以转换多种内容的程序,但我需要在二进制转换方面寻求帮助。我的文本转二进制代码已经可用,但我不确定如何进行二进制到文本的转换。这是触发转换的按钮的代码:

String code = jTextArea5.getText();
if (code == null) {
    System.out.println(jTextArea1.getText( ));
    String writing = jTextArea1.getText();

    byte[] bytes = writing.getBytes();
    StringBuilder binary = new StringBuilder();

    for (byte b : bytes) {
        int val = b;

        for (int i = 0; i < 8; i++){
            binary.append((val & 128) == 0 ? 0 : 1);
            val <<= 1;
        }
        binary.append(' ');
    }

    jTextArea5.setText("" + binary);
}
else
{
   System.out.println(jTextArea1.getText( ));
    String binary = jTextArea1.getText();

    int ascii = Integer.parseInt(binary, 2);
    char character = (char)ascii;

    jTextArea5.setText("" + character); 
}

如果有人知道如何修复这段代码使其正常工作,那就太好了。谢谢!注意-下面的代码单独使用时有效,但与任何将jTextArea5中的二进制转换为jTextArea1中的文本的尝试结合使用时无效。
    System.out.println(jTextArea1.getText( ));
    String writing = jTextArea1.getText();

    byte[] bytes = writing.getBytes();
    StringBuilder binary = new StringBuilder();

    for (byte b : bytes) {
        int val = b;

        for (int i = 0; i < 8; i++){
            binary.append((val & 128) == 0 ? 0 : 1);
            val <<= 1;
        }
        binary.append(' ');
    }

    jTextArea5.setText("" + binary);

你能给一个二进制输入的例子并解释它的输出应该是什么吗? - Code-Apprentice
如果我在jTextArea5中输入“01110100 01100101 01110011 01110100”,那么我应该在jTextArea1中得到“test”。反之亦然。 - Razor Shadow
你需要将它分成8个块。你可以使用StringTokenizer来完成这个任务。 - case1352
我不知道如何做,你能详细说明一下吗? - Razor Shadow
2个回答

2

将二进制转换为整数:

String binary = "010101";    
int ascii = Integer.parseInt(binary, 2);

然后将整数转换为ASCII码:
char character = (char)ascii;

抱歉,我只学了一周的Java,我的理解有限。这些代码应该放在哪里?它们是如何工作的? - Razor Shadow
是的,我来解释一下布局: 有两个文本区域,一个在另一个下面。 它们旁边是一个名为“转换”的按钮和一个名为“清除”的按钮。 清除只是清除两个框中的内容。 转换用于将第一个框中的文本转换为第二个框中的二进制。 现在我正在尝试允许在第二个框中输入二进制以获取第一个框中的文本。 - Razor Shadow
好的,现在一切都很好,除了这一行(它说意外类型,需要值但找到类):jTextArea5.setText("" + char); - Razor Shadow
等一下,我在你的修订历史中看到了将char扩展为character的扩展,并尝试了它。一切看起来都很好,没有明显的错误,但是当我运行程序时,我收到了一堆错误...我要把整个代码放上去,不仅仅是文本到二进制位,以防它改变任何东西(我有一种感觉它会这样做)。 - Razor Shadow

1

将5和1交换位置,以便从正确的文本框中获取二进制。

并使用StringTokenizer处理每个8个字符的块

不要忘记导入StringTokenizer

    else
    {
       System.out.println(jTextArea5.getText( ));
        String binary = jTextArea5.getText();
        StringTokenizer st = new StringTokenizer(binary," ");
         while(st.hasMoreTokens()){
             int ascii = Integer.parseInt(st.nextToken(), 2);
             char character = (char)ascii;
             jTextArea1.setText(jTextArea1.getText() + "" + character); 

         }
    }

这段代码检查 jTextArea5.getText() 中的内容。

if (code == null) {

将其更改为

if (code.equals("")) {

请确保在开始转换之前清空文本框中的内容。


啊,它可以工作了!但是将文本转换为二进制由于某种原因停止工作了。如问题所示,那段代码单独运行时可以工作,但在这个if/else块中就因未知原因停止工作了...你能找出原因吗? - Razor Shadow
是的,现在它完美地工作了!非常感谢 :) 出于好奇,'code == null'版本和'code.equals(""))'版本之间有什么区别? - Razor Shadow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接