首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QDataStream & QDataStream::operator>>问题(字符*& s)

QDataStream & QDataStream::operator>>问题(字符*& s)
EN

Stack Overflow用户
提问于 2010-04-23 02:35:03
回答 2查看 1.6K关注 0票数 1
代码语言:javascript
复制
 QFile msnLogFile(item->data(Qt::UserRole).toString());
 QDataStream logDataStream;
    if(msnLogFile.exists()){
        msnLogFile.open(QIODevice::ReadOnly);
        logDataStream.setDevice(&msnLogFile);
        QByteArray logBlock;
        logDataStream >> logBlock;
    }

这段代码不起作用。生成的QByte为空。如果我使用char*也是一样的。奇怪的是,相同的代码可以在另一个程序中运行。我正在努力找出两者之间的区别。如果我使用int、uint、quint8等命令,这将起作用

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-23 04:28:33

假设msnLogFile之前不是使用QDataStream创建的(如果是,则完全忽略此答案),您不希望使用>>运算符。

这是因为当QDataStream编写字符串时,它会将字符串的长度预置到输出字节中。这允许另一个QDataStream以正确的长度读回它,并获得相同的结果。因此,为什么int、qint8等可以正常工作;没有预置大小,它只是原始数据。

如果msnLogFile的内容是严格的文本,则需要传递QIODevice::Text标志来打开并使用QIODevice::readLine()QIODevice::readAll(),但是如果是二进制数据,则必须使用QDataStream::readRawData()并以正确的顺序和正确的大小读出数据。

票数 3
EN

Stack Overflow用户

发布于 2010-04-23 03:54:59

我大胆地猜测这是因为您没有指定协议版本。您应该调用setVersion()以确保可能使用不同版本的Qt的多台计算机都使用相同的协议版本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2693451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档