一、参考大神博客:
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"));
发现这个会出现丢数据的现象出现,我这边出现了,自己注意一下