qt QFile二进制文件读取int数据不对

zwb2214990526 2014-10-11 10:09:50
使用QFile 将多种类型的数据保存成二进制文件,其中的int类型数据在读文件时发现不对
例如200000,读取时变成212992。

200000 = 0x00030d40
212992 = 0x00034000

其中0d部分没有被读取,打开保存的二进制文件,在文件所保存的数据时正确的
原本的文件修改太多,于是针对这个问题专门写了个小程序实验
实在找不到解决方法,求大牛指点迷津


写文件部分

QDir *temp = new QDir;
bool exist = temp->exists("temp");
if(exist)
QMessageBox::warning(this,QString::fromUtf8("创建文件夹"),QString::fromUtf8("文件夹已经存在!"));
else
{
bool ok = temp->mkdir("temp");
if( ok )
QMessageBox::warning(this,QString::fromUtf8("创建文件夹"),QString::fromUtf8("文件夹创建成功!"));
}
QFile file("temp/myfiless.xox");
qDebug() << file.open(QIODevice::WriteOnly );
QDataStream out(&file);

out << (quint32)0xA0B0C0D0;
out << (qint32) 123;
out.setVersion(QDataStream::Qt_4_8);

out << QString("xaxaxaxa");
out << QString("aaaaaaaaaa");
out << (int) 200000;
out << QString::fromUtf8("试试时");






读文件部分




QString path = QFileDialog::getOpenFileName(this,
tr("Open File"),
".",
tr("Text Files(*.xox)"));
if(!path.isEmpty()) {
QFile file(path);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QMessageBox::warning(this, tr("Read File"),
tr("Cannot open file:\n%1").arg(path));
return;
}
QDataStream in(&file);
quint32 magic;
in>>magic;
if(magic !=0xA0B0C0D0)
{
QMessageBox::warning(this, tr("Read File"),
QString::fromUtf8("格式不对"));
return;

}
qint32 version;
in>>version;
if(version < 100)
return;
else
in.setVersion(QDataStream::Qt_4_8);
QString str;
int arr;
in >> str;
qDebug() << str;
in >> str;
qDebug() << str;
qDebug()<< sizeof(str);
in >> arr;
qDebug() << arr;
qDebug()<< sizeof(arr);
in >> str;
qDebug() << str;
file.close();
} else {
QMessageBox::warning(this, tr("Path"),
tr("You did not select any file."));
}

...全文
417 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwb2214990526 2014-10-14
  • 打赏
  • 举报
回复
已经解决了,非常感谢。
donwmufromdying 2014-10-13
  • 打赏
  • 举报
回复
好吧,楼上正解。
懒懒的吉他手 2014-10-13
  • 打赏
  • 举报
回复
0d是CR,也就是回车,你读取的方法有问题file.open(QIODevice::ReadOnly | QIODevice::Text) 按text读取肯定不读0d 去掉QIODevice::Text file.open(QIODevice::ReadOnly)即可
zwb2214990526 2014-10-11
  • 打赏
  • 举报
回复
经测试,short 和int类型的数据,只要包含0x0d的数都会有问题。 我从0x0e存储到0xff 都可以正常读取,其后到0x010d后面的数据就乱了, 应该是读取到含有0d的数后,后面的读取就会出现混乱。 float的数据测试没有问题。

16,203

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧