QDataStreamとソケットプログラミングについてはかなり新しいです。クライアントからホストにquint32ヘッダ値(4バイト)を送信するだけです。しかし、私は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、およびfriendsを使用する必要があります。 「int」と「long」を正気にすることは狂っている。 –
Lalaland
私は 'uint32_t a = htonl(32)'を試しましたが、結果はまだ同じです... –