我正在努力将ID3v2标记内的简单jpeg文件从c ++通过TCP套接字传输到java(Android)。库“taglib”提供了解压缩此文件的功能,我可以将jpeg保存为新文件。
发送功能如下所示
char *parameter_full = new char[f3->picture().size()+2];
sprintf(parameter_full,"%s\n\0",f3->picture().data());
// send
result = send(c,parameter_full,strlen(parameter_full),0);
delete[] parameter_full;
其中
f3-> picture()。data()返回一个指向内部数据结构的指针(它返回char *)和 f3-> picture()。size()返回数组的大小。
然后Android用
接收它String imageString = inFromServer.readLine();
byte[] imageBytes = imageString.getBytes();
Bitmap cover = BitmapFactory.decodeByteArray(imageBytes,0,imageBytes.length);
但不知怎的,decodeByteArray总是返回null。我的想法是Java没有正确接收图像,因为imageString只包含4个字符...而提取的jpeg文件大小为12.7 KB。 但出了什么问题?
马丁
答案 0 :(得分:2)
您不应对字节数据使用字符串函数,因为0值被视为字符串终止符。如果您需要在Java端复制char*
以及byte[]
InputStream
读取函数,请尝试在C ++端查看memcpy。