当前位置: 代码迷 >> QT开发 >> qt QFile二进制文件读取int数据不对,该怎么解决
  详细解决方案

qt QFile二进制文件读取int数据不对,该怎么解决

热度:108   发布时间:2016-04-25 03:10:40.0
qt QFile二进制文件读取int数据不对
使用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;