基于结构体的二进制文件读写
- 项目介绍
- 工程创建
- 结构体的创建
- 写二进制文件
- 结果
- 读二进制文件
- 结果
- 参考文献
项目介绍
本次设计是为了提高读写二进制文件的效率,以约定的结构体形式进行读写操作,避免了一个字节一个字节的多次写入读取操作,并且能以特定的结构读取到二进制数据流的文件,即以某种特定的协议进行读写操作。
工程创建
本次是对读写的操作的认识,则创建的工程为控制台应用。
结构体的创建
分别以short、int、long long类型数据进行连续数据100次的顺序写入
#pragma pack(1) //字节对齐typedef struct
{short b;int c;long long d;
}inputInfo;
写二进制文件
#include <QtCore/QCoreApplication>
#include "inputInfo.h"
#include <QFile>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);int count = 1; //计数值//初始化结构体inputInfo myInputInfo ={1,2,3};QFile file("test.dat");if (file.open(QIODevice::WriteOnly|QIODevice::Truncate)){while((count++)<=100){file.write((char*)&myInputInfo,14); //14为结构体的字节长度,可以用sizeof()算出myInputInfo.b += 3;myInputInfo.c += 3;myInputInfo.d += 3;}}file.close();
}
结果
读二进制文件
#include <QtCore/QCoreApplication>
#include "inputInfo.h"
#include <QFile>
#include <QDebug>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);//读二进制文件inputInfo myInputInfo;QFile file("test.dat");if (file.open(QIODevice::ReadOnly)){while(!file.atEnd()){file.read((char*)&myInputInfo,14);qDebug()<<myInputInfo.b<<myInputInfo.c<<myInputInfo.d; //输出调试}}file.close();return a.exec();
}
结果
参考文献
[1] 陆文周. 魅力.实践.发现–QT5开发及实例(第三版)[M]. 电子工业出版社, 2017.