qt中使用QDataStream 来进行操作二进制文件的读写

一、参考大神博客:

https://blog.youkuaiyun.com/u013007900/article/details/46459613

https://blog.youkuaiyun.com/amnes1a/article/details/64125120

二、使用QDataStream的小事例1:

 //写入二进制文件为file.dat
    QFile file("file.dat");
    file.open(QIODevice::WriteOnly);//只写模式
    QDataStream out(&file);
    out << QString("hello Chinese");
    out << (qint32)66;
    file.close();

    //读二进制操作文件file.dat
    file.open(QIODevice::ReadOnly);//只读模式
    QDataStream in(&file);
    QString str;
    qint32 a;
    in >> str >> a;
    qDebug()<<"1111"<<str; //hello
    qDebug()<<"2222"<<a;//66

三、操作二进制文件 具体事例2:

#include "mainwindow.h"
#include <QApplication>
#include <QCoreApplication>
#include <QFile>
#include <QVector>
#include <QMap>
#include <QDataStream>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
  
    //创建test.dat文件
    QFile file("test.dat");
    if (!file.open(QIODevice::ReadWrite))
    {
       qDebug() << "open file failed";
       return 0;
    }
    QDataStream ds(&file);
    const char *wstr = "hello-world";
    quint32 wi = 1234;
    double wd = 1.1;
    float wf = 2.2f;
    QVector<int> wvector;
    wvector.push_back(1);
    wvector.push_back(2);
    wvector.push_back(3);
    QMap<int,int> wmap;
    wmap.insert(4, 4);
    wmap.insert(5, 5);
    wmap.insert(6, 6);
    ds << wstr;
    ds << wi;
    ds << wd;
    ds << wf;
    ds << wvector;
    ds << wmap;
    ds.writeBytes("fileend111111", qstrlen("fileend111111"));
    ds.writeRawData("reallyend11111", qstrlen("reallyend11111"));

    //开始读取text.dat文件
    file.seek(0);
    char *rstr;
    quint32 ri;
    double rd;
    float rf;
    QVector<int> rvector;
    QMap<int, int> rmap;
    char *rbytes;
    uint len;
    char *rraw = new char[100]{0};
    int rlen;
    ds >> rstr;
    ds >> ri;
    ds >> rd;
    ds >> rf;
    ds >> rvector;
    ds >> rmap;
    ds.readBytes(rbytes, len);
    ds.readRawData(rraw, rlen);
    qDebug() << rstr;
    qDebug() << ri;
    qDebug() << rd;
    qDebug() << rf;
    qDebug() << rvector;
    qDebug() << rmap;
    qDebug() << rbytes;
    qDebug() << rraw;
    return a.exec();
}

注意:这个 ds.writeRawData("reallyend11111", qstrlen("reallyend11111"));

发现这个会出现丢数据的现象出现,我这边出现了,自己注意一下

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值