使用QDataStream读/写原始数据

时间:2012-01-30 03:39:53

标签: c++ qt

我对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 个答案:

答案 0 :(得分:7)

在尝试使用ds.device()->reset();读取数据之前,您应该通过调用ds.readRawData()来重置流设备的位置。

ds.readRawData()将返回读取的字节数。如果你检查它,它可能会返回0