【问题标题】:java byte array to Stringjava字节数组转字符串
【发布时间】:2014-02-12 22:28:47
【问题描述】:

我正在尝试制作一个Java 二进制翻译器,并且我已经着手将二进制文件翻译回String。我已经到了byte 数组。我想把它转换成字符串。

例如,我想要一个新的 byte 数组 {01000001, 01100001, 01000010, 01100010} 返回 "AaBb"

我该怎么做?

【问题讨论】:

  • 如何使用String(byte[] bytes, String charsetName) 通过使用指定的字符集解码指定的字节数组来构造一个新的字符串。
  • (实际上,如果你已经有了字节数组,而不是字符串中的二进制位或类似的,你就完成了。)
  • 这个问题似乎跑题了,因为它是关于没有研究过 String 的构造函数

标签: java string binary bytearray


【解决方案1】:

我认为您真正想做的是将二进制(十进制)数转换为其 ASCII 表示。如果是这样,请尝试以下操作:

public class ByteArrayToAsciiChar {

  public String byteToCharacter(byte b) {
    return Character.valueOf((char)b).toString();
  }

  public static void main(String[] args) {
    byte[] byteArray = {
        0b00100101,
        0b01000001,
        0b01100001,
        0b01000010,
        0b01100010,
        0b01010101
    };

    ByteArrayToAsciiChar testClass = new ByteArrayToAsciiChar();

    for (byte b : byteArray) {
      System.out.println("Byte: " + b + " ==> " + testClass.byteToCharacter(b));
    }

  }

}

给出这个输出:

Byte: 37 ==> %
Byte: 65 ==> A
Byte: 97 ==> a
Byte: 66 ==> B
Byte: 98 ==> b
Byte: 85 ==> U

HTH

【讨论】:

    【解决方案2】:

    呃……就这么简单:

        byte[] bytes = {0b01000001, 0b01100001, 0b01000010, 0b01100010};
        String str = new String(bytes, "ASCII");
    

    当然,这是假设字节代表 ASCII 编码的字符。如果不是,则使用 实际 字符编码的名称。

    如果您要经常这样做,那么值得查找字符集的 Charset 对象并使用 String(byte[], Charset) 重载。

    【讨论】:

    • 确实,后者更好,因为您可以在编译时确定所需的字符集确实存在。然而,它不仅仅从 Java7 开始工作。
    • @Ingo - 它也适用于 Java 6 - docs.oracle.com/javase/6/docs/api/java/lang/…。而且可能更早。
    • 哦!傻我。但我记得在 Java6 中有一些构造函数只接受一个字符集名称(并且在名称不正确时抛出异常)而不是一个字符集。也许 InputStreamReader 或类似的东西。
    【解决方案3】:

    如果您已经有一个字节数组(示例如下),您可以轻松地将字节数组传递给一个新字符串(如Ingo 建议的那样)和中提琴 - 大功告成。

    byte b[] = new byte[4];
    b[0] = Byte.parseByte("01000001", 2);
    b[1] = Byte.parseByte("01100001", 2);
    b[2] = Byte.parseByte("01000010", 2);
    b[3] = Byte.parseByte("01100010", 2);
    
    String output = new String(b);
    

    如果你只有一个字符串形式的二进制数组,你可以使用这个:

    public String convertBinaryArrayToString(String binary[]) {
        String ret = null;
        for (String i : binary) {
            ret += (char) Byte.parseByte(i, 2);
        }
        return ret;
    }
    

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 2013-12-19
      • 2011-07-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多