QByteArray到char *,用libcurl发送

时间:2010-09-20 14:33:07

标签: c++ qt libcurl

我将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 *,然后直接从内存中发送。

4 个答案:

答案 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*