【问题标题】:Convert bytearray with image to string将带有图像的字节数组转换为字符串
【发布时间】:2012-08-10 20:11:06
【问题描述】:

在我的程序中,我收到一个字节数组。第一部分实际上是一个字符串,第二部分是一个转换为字节数组的图片。
像这样:

<STX>1<US>length of picture<ETX> here are the bytes...  

目前我有这个来拆分 ETX 之前和之后的部分

string incomingMessage = incomingBytes.toString();

String messagePart = incomingMessage.substring(0, firstETX);
String dataPart = incomingMessage.substring(firstETX, incomingMessage.length());

后来我用了

dataPart.getBytes();

将其转换回字节数组。

但我认为转换包含图像的字节会导致一些问题,因为我的程序不会将字节转换为图像。

那么如何在不将其转换为字符串的情况下获取 ETX 之后的字节呢? 或者我如何保留原始字节以便我可以使用它们?

谢谢

【问题讨论】:

  • 所以你得到的字节数组实际上在开始时包含一些 ASCII 字符,然后是原始图像字节?还是您收到带有 base64 格式字节的字符串?
  • 是的,字节数组包含一些 ASCII 字符。 ETX 之后的所有内容都是我需要的图片字节数。

标签: android bytearray


【解决方案1】:

您需要在字节数组中找到&lt;ETX&gt; 的位置。然后,您可以将其用作 BitmapFactory.decodeByteArray

的偏移量

我无法测试这段代码,但你应该明白了。

  final byte[] etxBytes = {'<','E','T','X','>'};
    int i =0 ;
    boolean found = false;
    for (i = 0; !found && (i < (incomingBytes.length-etxBytes.length)); i++){
        found = true;
        for (int j=i; (j-i) < etxBytes.length && found; j++){
            if (etxBytes[j-i]!=incomingBytes[j]){
                found = false;
                break;
            }
        }
    }
    if (found){
        int offset = i + etxBytes.length;
        Bitmap image = BitmapFactory.decodeByteArray(incomingBytes, offset, incomingBytes.length-offset);
    }

【讨论】:

    【解决方案2】:

    根据answer 使用 base 64 编码将字节编码为字符串,然后将它们解码回图像。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 2021-07-21
      • 2021-11-11
      • 1970-01-01
      • 2013-04-18
      • 2018-10-31
      • 1970-01-01
      相关资源
      最近更新 更多