чтение / запись необработанных данных с помощью QDataStream - PullRequest
4 голосов
/ 30 января 2012

Я довольно новичок в программировании на QDataStream и Socket, и я хочу просто отправить значение заголовка quint32 (четыре байта) от клиента к хосту. Но у меня проблемы с QDataStream.

QByteArray data;
QDataStream ds(&data, QIODevice::ReadWrite);
int a = htonl(32);
char *head = (char*)&a;
for(int i=0;i<4;i++)
    qDebug() << QString::number(int((head[i]&0xff))+0x100, 16) << " ";
qDebug() << endl;

здесь вывод "100 100 100 120", что я и хочу. Затем я пытаюсь записать его в поток данных.

ds.writeRawData(head, 4);
char *buffer = new char[4];
ds.readRawData(buffer, 4);
for(int i=0;i<4;i++)
    qDebug() << QString::number(int((buffer[i]&0xff))+0x100, 16) << " ";
qDebug() << endl;

Но здесь вывод здесь "100 100 100 100"

Имею ли я какое-то недопонимание относительно использования QDataStream?

1 Ответ

7 голосов
/ 30 января 2012

Необходимо сбросить положение потокового устройства, вызвав ds.device()->reset();, прежде чем пытаться прочитать данные с помощью ds.readRawData().

ds.readRawData() вернет количество прочитанных байтов. Если вы проверите это, он, вероятно, возвращает 0.

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