【问题标题】:How to convert binary to text in Java? [duplicate]如何在Java中将二进制转换为文本? [复制]
【发布时间】:2012-10-09 13:49:04
【问题描述】:

可能重复:
Binary to text in 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);

【问题讨论】:

  • 你能举一个二进制输入的例子并解释它的输出文本应该是什么吗?
  • 如果我在 jTextArea5 中输入 '01110100 01100101 01110011 01110100',我应该在 jTextArea1 中得到 'test'。反之亦然。
  • 你需要将它分成 8 个块。你可以使用 StringTokenizer 来做到这一点
  • 我不知道该怎么做,你能详细说明一下吗?

标签: java text binary ascii


【解决方案1】:

将二进制转换为整数:

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

然后把整数转成ascii:

char character = (char)ascii;

【讨论】:

  • 抱歉,我才学Java一周,所以理解有限。这些具体在代码中的什么位置,它们是如何工作的?
  • 是的,我将解释布局:有两个文本区域,一个在另一个下方。它们旁边是一个名为“转换”的按钮和一个名为“擦除”的按钮。擦拭只是擦拭两个盒子的内容。 Convert 用于将第一个框中的文本转换为第二个框中的二进制。我现在正在尝试允许在第二个中输入二进制以在第一个中获取文本。
  • 好的,现在一切都很好,除了这一行(它说意外类型,必需值但找到类):jTextArea5.setText("" + char);
  • 等等,我在你的修订历史中看到了 char 到 character 的扩展,并尝试了它。一切看起来都很好,没有明显的错误,但是当我运行程序时,我收到了一大堆错误......我将把我的整个代码,而不仅仅是文本到二进制位,以防万一改变任何东西(我有一种感觉)。
【解决方案2】:

交换 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 段中它只是因为未知原因停止工作......你能弄清楚吗?
  • 是的,它现在运行良好!非常感谢 :) 出于好奇,'code == null' 版本和 'code.equals(""))' 版本有什么区别?
猜你喜欢
  • 2021-05-01
  • 2016-07-31
  • 2012-05-04
  • 2017-04-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2015-06-02
  • 2011-07-09
相关资源
最近更新 更多