【问题标题】:Converting binary data to characters in java在java中将二进制数据转换为字符
【发布时间】:2012-01-27 21:41:36
【问题描述】:

我有一个文件,其中的内容只有 0 和 1

我想编写一个java程序,将0和1的每个8位转换为char 或者换句话说,将文件内容从二进制转换为字符。

我可以为此目的使用哪个函数?

【问题讨论】:

  • 文本文件是包含可以解释为文本的字节的二进制文件。换句话说,如果这些 0 和 1 是按照 ASCII 或 UICODE 编码排列的,你不需要做任何特殊的事情,只需将文件读入即可。
  • 不,我必须将随机的 0 和 1 写入文本文件然后,从该文件中读取并在屏幕上打印字符
  • +1。换句话说:所有文件都是二进制文件。一些二进制文件恰好包含以某种编码表示字符的字节。
  • @user1077980: 所以你的文件是一个只包含字符'0'和'1'的文本文件?
  • 如果我在文本文件中写了以下内容:00100001 并且我想在屏幕上以字符形式打印文件的内容,例如打印“a”我应该使用哪个函数?

标签: java binary char


【解决方案1】:

这个也行

    String s = "0110100001100101011011000110110001101111";
    String str = "";

    for (int i = 0; i < s.length()/8; i++) {

        int a = Integer.parseInt(s.substring(8*i,(i+1)*8),2);
        str += (char)(a);
    }

    System.out.println(str);

【讨论】:

    【解决方案2】:

    首先,您必须将 8 个“0”和“1”字符的字符串转换为字节。这很容易使用Integer.parseInt() 完成,并使用

    将 int 转换为字节
    byte b = (byte) (i & 0xFF)
    

    然后你需要创建一个包含所有这些字节的字节数组。

    最后,您需要将此字节数组转换为字符串。这是您需要决定使用哪种编码的地方。同一个 String 可以根据编码转换成不同的字节数组。并且所有字节序列都不代表有效字符。假设你想使用 ASCII 作为编码,使用new String(bytes, "ASCII")。但请注意,所有大于 128 的字节都不是有效的 ASCII 字符。

    【讨论】:

    • 是的,它运行良好 :) 但是在从文件读取时使用 .hasNextByte() 怎么样?
    • 我试过了:while(input.hasNextByte()) 但它从来没有进入循环!
    • 可能,是的,前提是基数是 2。你为什么不直接测试一下?
    • while(input.hasNextByte(2)){ System.out.println("yes"); System.out.println(""+input.nextByte()); }
    • 不知道为什么进不了循环
    【解决方案3】:

    如果您已经在字节数组byte[] 中有文件的内容,您可以简单地使用适当的constructor String(byte[], Charset)

    但请注意,某些字符集每个字符使用多个字节,因此您可能不想使用UTF-8,而是使用US-ASCII

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 2015-01-02
      • 2014-11-07
      • 2013-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-24
      相关资源
      最近更新 更多