我對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