我是相当新的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;
Run Code Online (Sandbox Code Playgroud)
这里,输出是"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;
Run Code Online (Sandbox Code Playgroud)
但这里的输出是"100 100 100 100"
我对QDataStream的使用有一些误解吗?
您应该ds.device()->reset();在尝试读取数据之前通过调用重置流设备的位置ds.readRawData().
ds.readRawData()将返回读取的字节数.如果你检查它,它可能会返回0.