首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将QByteArray转换为QDataStream和save.Please中的一些问题帮助我

将QByteArray转换为QDataStream和save.Please中的一些问题帮助我
EN

Stack Overflow用户
提问于 2012-03-09 13:47:55
回答 3查看 3.2K关注 0票数 1

以下是我的代码:

代码语言:javascript
运行
复制
QFile f("tql.dll"); //a file to be copied
f.open(QFile::ReadOnly);
QByteArray qba = f.readAll();
f.close();
QString hexstr = qba.toHex();
qba = QByteArray::fromHex(hexstr.toLatin1()); //i try this and it dose not change the original data
QFile f2("tql3.dll");
f2.open(QIODevice::ReadWrite);
QDataStream out(&f2);
out << qba;
f2.close();
qDebug() << "done" << "\n"; //when i md5sum the tql3.dll.it is not the same as tql.dll

我用vim来查看tql.dll和tql3.dll的十六进制,找出is.Then发现tql3.dll.why顶部有"00 EC 00“的差异吗?

PS:我知道把QByteArray保存到QFile direct.but是可以的,我只想试试QDataStream。

EN

回答 3

Stack Overflow用户

发布于 2012-03-09 14:10:10

QDatastream用于可移植地流Qt类型,而不是普通的二进制数据。

当您输出到QDataStream时,每个变量都有一个包含内部数据的头(我假设类型为+ length)。

请参阅http://qt-project.org/doc/qt-4.8/QDataStream.html#details

写入流的每一项都是以预定义的二进制格式编写的,这种格式根据项的类型而有所不同

票数 2
EN

Stack Overflow用户

发布于 2012-03-09 15:24:56

数据流格式页说明了QByteArray的存储方式:

如果字节数组为null: 0xFFFFFFFF (quint32) 否则:数组大小(quint32)后面跟着数组字节,即大小字节。

您提交的这四个字节(32位)就是字节数组的长度。

QDataStream应该用于序列化,因此我无法创建1:1的文件副本。

票数 0
EN

Stack Overflow用户

发布于 2014-09-21 03:40:13

.Actually...有办法做到这一点。但首先,您必须意识到代码存在潜在的问题:

  1. 如果您试图使用十六进制字符串转换为二进制数据,这将根本不起作用!请记住,字符串实际上并不表示二进制数据。例如: 16位二进制“FF”是用二进制(使用十六进制符号)作为FF编写的。但是字符串FF与46 46一样(使用相同的16位二进制格式)。
  2. 使用QString::toLatin1 1()将而不是以unicode形式输出文本。我知道这可能不是你的目标,但为了一般知识,字符只有在字符是ASCII等价物的情况下才会转换为Latin1格式。如果您希望完全支持unicode,则应该使用QString::toUtf8 8()。

如果您想将一个转换为一个QDataStream,那么可以使用QDataStream::writeBytes(const *s,uint )函数和QByteArray::data()和QByteArray::size()。

在您的代码中,您可能希望用以下内容替换out << qba行:

代码语言:javascript
运行
复制
out.writeBytes(qba.data(), qba.size());

一种更安全的方法是使用以下代码:

代码语言:javascript
运行
复制
for (int i = 0; i < qba.size(); ++i)
{
    out << (quint8)qba.at(i);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9635072

复制
相关文章

相似问题

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