Проблема с сериализацией QDataStream - PullRequest
2 голосов
/ 11 апреля 2011

Сначала идет мой код.

QByteArray buff;
QDataStream stream(&buff, QIODevice::ReadWrite);
stream.setVersion(QDataStream::Qt_4_7);
stream << 5;
stream << 6;
qDebug() << buff;
int x;
int y;
stream >> x >> y;
qDebug() << x << y;

Я ожидаю, что x будет 5, а y - 6. Но он показывает 0 0 Вот вывод

"
0 0

Ответы [ 3 ]

3 голосов
/ 11 апреля 2011

Как говорил Фрэнк, QDataStream все еще находится в конечной позиции (после записи ваших данных).Если вы не хотите создавать новый поток, также должна быть возможность вызвать stream.reset(), чтобы поместить внутреннюю позицию потока в начало.Или что-то вроде stream.seek(0).

1 голос
/ 11 апреля 2011

Попробуйте это:

QByteArray buff;
QDataStream stream(&buff, QIODevice::ReadWrite);
stream.setVersion(QDataStream::Qt_4_0);
stream << 5;
stream << 6;
qDebug() << buff.toHex();

int x;
int y;

// This line will move the internal QBuffer to position 0
stream.device()->reset();

stream >> x >> y;
qDebug() << x << y;

Выход:

"0000000500000006" 
5 6 
0 голосов
/ 11 апреля 2011

Вы не можете читать / писать таким образом из / в QByteArray, используя один QDataStream одновременно, из-за внутреннего состояния потока данных (положения потока).Попробуйте со вторым QDataStream для чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...