【问题标题】:ByteArray String to ByteArray? [duplicate]字节数组字符串到字节数组? [复制]
【发布时间】:2015-03-19 23:02:39
【问题描述】:

我有一个要转换为字节数组的字符串,但是,我的字符串是图像字节数组的实际表示(例如String x = "00123589504e47...")。所以,我被卡住了,因为 x.getBytes(); 不能完成这项工作。我需要一种方法将字符串转换为字节数组,然后将该字节数组保存到特定目录中的图像中。我该如何施放它?

【问题讨论】:

  • 我的字符串是字节数组的实际表示:这是什么意思?要精确。假设字节是 1、-6 和 124。对应的字符串是什么?
  • 显示输入字符串和预期输出。
  • 如果是base16编码的,看这个问题:stackoverflow.com/questions/140131/…
  • 这没有任何意义。字节是一个数字,其值可以从 -128 到 127。图像文件可以包含这些值中的任何一个。如何从图像的字节创建字符串?
  • “字节表示”不明确。将字节数组表示为字符串的方法不止一种。请指定字符串的确切格式。

标签: java


【解决方案1】:

我总是用这一个班轮:

   byte[] data = DatatypeConverter.parseHexBinary(x);

然后您可以为图像实例化 FileOutputStream 并将字节写入其中。

【讨论】:

    【解决方案2】:

    x.getBytes(); 并不能完成这项工作

    是的,这很正常……

    charbyte 彼此没有关系;你不能无缝地从一个转换到另一个并期望获得一个理智的结果。阅读有关字符编码的信息。

    根据您的需要,字符串实际上是图像的“十六进制转储”。因此,您需要通过两个字符读取两个字符并将其转换为字节数组。

    怎么样?嗯,你有提示。首先,生成的字节数组的长度始终是字符串除以 2 的长度,因此您可以这样做:

    // input is the string
    final int arrayLen = input.length() / 2;
    final byte[] result = new byte[arrayLen];
    

    然后你需要遍历字符串的字符并将这两个字符解析为一个字节,并将其添加到数组中:

    int strIndex;
    char[] chars = new char[2];
    
    for (int arrayIndex = 0; arrayIndex < arrayLen; arrayIndex++) {
        strIndex = 2 * arrayIndex;
        chars[0] = input.charAt(strIndex);
        chars[1] = input.charAt(strIndex + 1);
        result[arrayIndex] = Byte.parseByte(new String(chars), 16);
    }
    
    // Done
    return result;
    

    【讨论】:

      猜你喜欢
      • 2011-10-04
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      相关资源
      最近更新 更多