我将QPixmap保存到QByteArray,然后将其写入char *时遇到问题。 例如,我正在尝试使用ofstream写入文件。
QByteArray bytes;
QBuffer buff(&bytes);
buff.open(QIODevice::ReadOnly);
pixmap.save(&buff, "PNG");
QString str(bytes);
char *data;
data = (char*)qstrdup(str.toAscii().constData());
ofstream myfile;
myfile.open ("test.jpg");
myfile << data;
myfile.close();
但我得到的所有文件都是:
‰PNG
我需要char *的原因是因为我在写入磁盘时遇到了一些权限问题,然后使用libcurl发送。 我想将它加载到char *,然后直接从内存中发送。
答案 0 :(得分:2)
您遇到空字节。你需要像write()
这样的东西,因为<<
运算符不允许你告诉字符串有多长并且在第一个空字节处停止写入:
const QByteArray array = str.toAscii();
myfile.write(array.constData(), array.size());
答案 1 :(得分:1)
使用此解决问题:
memcpy(data,bytes.constData(),bytes.size()+1);
至少应该尝试过。
答案 2 :(得分:0)
没有直接关联,但有没有理由使用libcurl而不是集成的QNetworkAccessManager?
答案 3 :(得分:0)
您可以使用strdup()
。这种方法正在这样做
char *strdup (const char *s) {
char *d = malloc (strlen (s) + 1); // Space for length plus nul
if (d == NULL) return NULL; // No memory
strcpy (d,s); // Copy the characters
return d; // Return the new string
}
此处有更多信息:strdup() - what does it do in C?
以便获得char*
,而ConstData()
将返回const char*