我对QDataStream和Socket编程相当陌生,我想要做的就是简单地从客户端向主机发送一个quint32头部值(四个字节)。但是我在使用QDataStream时遇到了一些麻烦。使用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的使用的一些误解?
当你在处理原始字节的网络上工作时,你应该使用和uint32_t,uint8_t和朋友。依靠“int”和“long”来理智是疯狂的。 –
Lalaland
2012-01-30 03:42:28
我试过'uint32_t a = htonl(32)',但结果仍然是一样的...... – 2012-01-30 03:52:04