我們應該真正看到寫代碼,以及如何創建QDataStream。我試着用下面的示例,在這種情況下你的函數工作得很好:執行時
#include <QCoreApplication>
#include <QDebug>
#include <QDataStream>
#include <QBuffer>
void myFunc(QDataStream& in)
{
quint8 v;
in >> v;
qDebug() << v;
// Ok, I caught v value successfuly
QString s;
in >> s;
qDebug() << s;
// Didnt work :<
}
int main(int argc, char ** argv) {
QCoreApplication a(argc, argv);
QBuffer buffer;
buffer.open(QBuffer::ReadWrite);
// write test data into the buffer
QDataStream out(&buffer);
quint8 ival = 42;
QString sval = "Qt";
out << ival;
out << sval;
// read back data
buffer.seek(0);
myFunc(out);
return a.exec();
}
輸出:
$ ./App
42
"Qt"
這對我來說很好。編寫代碼的代碼是什麼樣的? – cgmb
緩衝區存儲了很多東西,當我嘗試從中提取一個字符串時,位置沒有跳到下一個操作碼 –
如何將字符串寫入緩衝區? 「字符串長度存儲在2個第一個字節」是什麼意思? (因爲'QString'被存儲和讀取爲一個32位的值,後跟實際的UTF16字符串)。 – alexisdm