QT QString из QDataStream

Я работаю с буфером и пытаюсь получить из него строку, но не работает...

Пример:

*void myFunc(QDataStream& in)
{
    quint8 v;
    in >> v;
    // Ok, I caught v value successfuly
    QString s;
    in >> s;
    // Didnt work :<
}*

Длина строки хранится в 2 первых байтах...

Спасибо

2 ответа

Решение

Если строка не была записана как QStringВам нужно прочитать его длину и содержание отдельно.

quint8 v;
in >> v;

quint16 length = 0;
in >> length;

// the string is probably utf8 or latin
QByteArray buffer(length, Qt::Uninitialized);

in.readRawData(buffer.data(), length); 
QString string(buffer);

Возможно, вам придется изменить порядок байтов QDataStream с QDataStream::setByteOrder перед чтением 16-битной длины.

Мы должны увидеть код написания и то, как вы создаете QDataStream. Я пробовал на следующем примере, и в этом случае ваша функция работает очень хорошо:

#include <QCoreApplication>
#include <QDebug>
#include <QDataStream>
#include <QBuffer>

void myFunc(QDataStream& in)
{
    quint8 v;
    in >> v;
qDebug() << v;
    // Ok, I caught v value successfuly
    QString s;
    in >> s;
qDebug() << s;
    // Didnt work :<
}


int main(int argc, char ** argv) {
    QCoreApplication a(argc, argv);

    QBuffer buffer;
    buffer.open(QBuffer::ReadWrite);


    // write test data into the buffer
    QDataStream out(&buffer);
    quint8 ival = 42;
    QString sval = "Qt";
    out << ival;
    out << sval;

    // read back data
    buffer.seek(0);
    myFunc(out);

    return a.exec();
}

Вывод при выполнении:

$ ./App 
42 
"Qt" 
Другие вопросы по тегам