QByteArray to char *, отправка с помощью libcurl - PullRequest
1 голос
/ 20 сентября 2010

У меня проблемы с сохранением 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

Причина, по которой мне нужен символ *потому что у меня проблемы с разрешением при записи на диск, а затем при отправке с помощью libcurl.Я хочу загрузить его на символ *, а затем отправить его прямо из памяти.

Ответы [ 4 ]

2 голосов
/ 20 сентября 2010

Вы столкнулись с нулевым байтом.Вам понадобится что-то вроде write(), потому что оператор << не позволяет вам определить длину строки и прекращает запись в первом нулевом байте:

const QByteArray array = str.toAscii();
myfile.write(array.constData(), array.size());
1 голос
/ 20 сентября 2010

Решил проблему с помощью этого:

 memcpy(data,bytes.constData(),bytes.size()+1);

Должен был попробовать это хотя бы.

0 голосов
/ 09 ноября 2013

вы можете использовать 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 () - что он делает в C?

, чтобы вы получили char*,тогда как ConstData() вернет const char*

0 голосов
/ 22 сентября 2010

Не имеет прямого отношения, но есть ли причина, по которой вы используете libcurl вместо интегрированного QNetworkAccessManager?

...