我们应该真正看到写代码,以及如何创建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