-
2021-02-25 21:39:28
1.方法
Qt 使用 QFile 和 QDataStream 进行二进制数据文件的读写:
- QFile 负责文件的 IO 设备接口,即与文件的物理交互;
- QDataStream 以数据流的方式读取文件内容或写入文件内容。
QDataStream 保存文件时使用的数据编码的方式不同,可以保存为两种文件:
- 用 Qt 预定义编码保存各种类型数据的文件,定义文件后缀为“.stm”。Qt 预定义编码是指在写入某个类型数据,如整形数、字符串等到文件流时,使用 Qt 预定义的编码。可以将这种Qt预定义数据格式编码类比于 HTML 的标记符,Qt 写入某种类型数据时用了 Qt 预定义的标记符,读出数据时,根据标记符读出数据。使用 Qt 预定义编码保存的流文件,某些字节是 QDataStream 自己写入的,我们并不完全知道文件内每个字节的意义,但是用 QDataStream 可以读出相应的数据。
- 标准编码数据文件,定义文件后缀为“.dat”。在将数据写到文件时,完全使用数据的二进制原始内容,每个字节都有具体的定义,在读出数据时,只需根据每个字节的定义读出数据即可。
2.Qt预定义编码文件的读写
保存为stm文件
数据流写入数据时都使用运算符“<<”,不论写的是 qint16、qreal 还是字符串。
除了可以写入基本的数据类型外,QDataStream 流操作还可以写入很多其他类型的数据,如 QBrush、QColor, QImage、QIcon 等,这些称为可序列化的数据类型(Serializing Qt Data Types)。
QString fileName = "test.stm"; QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return false; //流读取文件 QDataStream stream(&file); //设置版本号,写入和读取的版本号要兼容 stream.setVersion(QDataStream::Qt_5_9); //写入流 QString name = "张三"; int age = 18; QColor color("red"); stream<<name; stream<<age; stream<<color; 关闭文件 file.close();
读取stm文件
QString fileName = "test.stm"; QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) return false; //流读取文件 QDataStream stream(&file); //设置版本号,写入和读取的版本号要兼容 stream.setVersion(QDataStream::Qt_5_9); QString name; int age = 0; QColor color; //输出流 stream>>name; stream>>age; stream>>color; //关闭文件 file.close();
3.标准编码文件的读写
保存为dat文件
创建通用格式文件(即文件格式完全透明,每个字节都有具体的定义,如 SEG-Y 文件)的方法是以标准编码方式创建文件,使文件的每个字节都有具体的定义。用户在读取这种文件时,按照文件格式定义读取出每个字节数据并做解析即可,不管使用什么编程语言都可以编写读写文件的程序。
QString fileName = "test.dat"; QFile file(fileName); if (!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) return false; //流读取文件 QDataStream stream(&file); //windows平台 stream.setByteOrder(QDataStream::LittleEndian); //写入流 stream<<QString("张三"); stream<<qint32(18); //关闭文件 file.close();
读取dat文件
QString fileName = "test.dat"; QFile file(fileName); if (!file.open(QIODevice::ReadOnly)) return false; //流读取文件 QDataStream stream(&file); //windows平台 stream.setByteOrder(QDataStream::LittleEndian); QString name; int age = 0; //输出流 stream>>name; stream>>age; //关闭文件 file.close();
更多相关内容 -
Qt存储二进制文件
2021-10-19 22:31:411. 存储基本类型 基本类型如int, double, char等,读写时按照其所占字节长度进行读写即可。要注意的是读写顺序一定要保持相同。如先写的int再写的double,那么读取时也必须按照这个顺序来依次读取。 write test....1. 存储基本类型
基本类型如int, double, char等,读写时按照其所占字节长度进行读写即可。要注意的是读写顺序一定要保持相同。如先写的int再写的double,那么读取时也必须按照这个顺序来依次读取。
write test.dat
int aaa = 111; double bbb = 222.222; char ccc[4] = "ccc"; QFile file("test.dat"); if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { file.write(reinterpret_cast<char *>(&aaa), sizeof(int)); file.write(reinterpret_cast<char *>(&bbb), sizeof(double)); file.write(reinterpret_cast<char *>(&ccc), 4); } file.close();
read test.dat
int aaa; double bbb; char ccc[4]; QFile file("test.dat"); if(file.open(QIODevice::ReadOnly)) { file.read(reinterpret_cast<char *>(&aaa), sizeof(int)); file.read(reinterpret_cast<char *>(&bbb), sizeof(double)); file.read(reinterpret_cast<char *>(&ccc), 4); qDebug() << "aaa: " << aaa << endl; qDebug() << "bbb: " << bbb << endl; qDebug() << "ccc: " << ccc << endl; }
2. 存储结构体
在用二进制文件保存配置信息/数据信息的情况下,自定义的结构体是最常见的数据结构,如
struct ied_info_stru { int ied_id; char ied_name[128]; char ref[256]; int dev_type; bool check_flag; short check_result; int sig_count; }
write test.dat
QFile file("test.dat"); if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { ied_info_stru ied_info; ied_info.ied_id = 2222; memcpy(ied_info.ied_name, "test name", 128); // 只给结构体里的两个信息赋了值,其他省略... file.write(reinterpret_cast<char *>(&ied_info), sizeof(ied_info_stru)); file.close(); }
read test.dat
QFile file("test.dat"); if(file.open(QIODevice::ReadOnly)) { ied_info_stru ied_info; file.read(reinterpret_cast<char *>(&ied_info.ied_id), sizeof(int)); file.read(reinterpret_cast<char *>(&ied_info.ied_name), 128); qDebug() << "ied_id: " << ied_info.ied_id << endl; qDebug() << "ied_name: " << ied_info.ied_name << endl; }
3. 存储嵌套结构体
更复杂的情况是,结构体里套着结构体,如struct 1中套着个struct 2的list
// struct 1 struct ied_info_stru { int ied_id; char ied_name[128]; char ref[256]; int dev_type; bool check_flag; short check_result; int sig_count; QList<sig_info_stru> sig_list; // list of struct 2 }; // struct 2 struct sig_info_stru { int sig_id; char sig_name[256]; char ref[256]; int sig_type; int yx_value; float yc_data; float up_data; };
要注意的是,由于结构体中新加入的QList<sig_info_stru> sig_list是一个list,即它的长度是未知的,所以这时候如果还是想用上一种方法,直接sizeof(ied_info_stru),这样计算出来的长度是错误的。
write test.dat
QFile file("test.dat"); if (file.open(QIODevice::WriteOnly | QIODevice::Truncate)) { ied_info_stru ied_info; ied_info.ied_id = 2222; memcpy(ied_info.ied_name, "test name", 128); // 构造两个list QList<sig_info_stru> ls_signals; sig_info_stru sig_1; memcpy(sig_1.sig_name, "sig1", 256); ls_signals.push_back(sig_1); sig_info_stru sig_2; memcpy(sig_2.sig_name, "sig2", 256); ls_signals.push_back(sig_2); ied_info.sig_list = ls_signals; // write to file file.write(reinterpret_cast<char *>(&ied_info.ied_id), sizeof(int)); file.write(reinterpret_cast<char *>(&ied_info.ied_name), 128); file.write(reinterpret_cast<char *>(&ied_info.ref), 256); file.write(reinterpret_cast<char *>(&ied_info.dev_type), sizeof(int)); file.write(reinterpret_cast<char *>(&ied_info.check_flag), sizeof(bool)); file.write(reinterpret_cast<char *>(&ied_info.check_result), sizeof(short)); file.write(reinterpret_cast<char *>(&ied_info.sig_count), sizeof(int)); for(int i = 0; i < ied_info.sig_list.size(); i++) file.write(reinterpret_cast<char *>(&ied_info.sig_list[i]), sizeof(sig_info_stru)); file.close(); }
read test.dat
QFile file("test.dat"); if(file.open(QIODevice::ReadOnly)) { ied_info_stru ied_info; file.read(reinterpret_cast<char *>(&ied_info.ied_id), sizeof(int)); file.read(reinterpret_cast<char *>(&ied_info.ied_name), 128); file.read(reinterpret_cast<char *>(&ied_info.ref), 256); file.read(reinterpret_cast<char *>(&ied_info.dev_type), sizeof(int)); file.read(reinterpret_cast<char *>(&ied_info.check_flag), sizeof(bool)); file.read(reinterpret_cast<char *>(&ied_info.check_result), sizeof(short)); file.read(reinterpret_cast<char *>(&ied_info.sig_count), sizeof(int)); qDebug() << "ied_id: " << ied_info.ied_id; qDebug() << "ied_name: " << ied_info.ied_name; // 读存进去的两个list sig_info_stru sig_info; for(int i = 0; i < 2; i++) { file.read(reinterpret_cast<char *>(&sig_info), sizeof(sig_info_stru)); qDebug() << "sig name:" << sig_info.sig_name; } }
-
Qt-读写二进制文件(数据结构)
2021-01-20 13:15:50二进制文件存储方式比较方便,文本小,保密效果好 定义一个数据结构并实现相关操作 使用QDataStream进行读写操做 数据结构 #include struct AccountInfo { // 数据 QString Account; QString LogPasswd; // 初始... -
QT之解析二进制文件(.dat)的实现
2019-04-11 16:26:16在工作中,经常会使用二进制文件(.dat),但是对于不同的结构存储方式不一样。 每次拿着手指头一个个数着数字和字母,不仅累眼睛还疼。 针对同一个结构体存储数据,自己写了一个简单的解析工具, 代码中的结构体... -
Qt开发二进制文件读取与操作学习汇总
2021-08-02 13:51:29Qt开发二进制文件读取与操作学习汇总导言需求分析Qt API:QFile问题分析输出结果:进行二次处理:输出结果如图:分析:Qt API:QDataStream问题分析:输出结果:C原生API:FILE(fopen,fread,fseek,fwrite)分析;...Qt开发二进制文件读取与操作学习汇总
导言
最近在进行Qt开发,涉及大量的matlab转C的工作,其中有很大一部分工作是读取二进制文件并对数据进行操作,而在matlab里简易清晰的读取方式,用C来实现往往会遇到很多问题,因此工作告一段落之后对近期学习工作的成果做总结以备不时之需也是必要的。
fseek(fid,0,'eof'); %指针移到文件数据末尾 Blen=ftell(fid); %获得指针位置 即末尾的位置,相当于数据长度 fseek(fid,0,'bof'); %重新回到文件数据开头 //uint8一个字节,uint16两个字节,uint32四个字节 obj_num=fread(fid,1,'uint8'); %读取第一个字节的数据并转为十进制给obj_num rat=fread(fid,1,'uint8'); %接着读取文件第二个字节的数据转为十进制给rat fread(fid,1,'uint16'); %接着第3,4字节的数据,但并不赋值 L=fread(fid,1,'uint16'); %接着读取第5.6字节的数据,转为十进制给L ys_da=fread(fid,L,'int16'); % 接着读取L个int16的数据每个都转为十进制,以数组的方式保存在ys_da里
Qt API:QFile and QDataStream
write
qt自带API会将多字节数据反序存储,因此我们读取之后,写入之前,需要把数据反序操作
template <typename T> T ReverseOrder(T oldValue) { T newValue; int size = sizeof(T); memset(&newValue, 0, size); for (int i = 0; i < size; i++) { //挨个取字节 BYTE value = (oldValue >> (i * 8)) & 0xFF; memset((char*)&newValue + size - i - 1, value, 1); } return newValue; }
QFile file(Wpath); file.open(QIODevice::WriteOnly); QDataStream out(&file); out << qint8(1); out << qint8(1); out << ReverseOrder(qint32(23.5)); out << qint32(0); out << qint32(0); out << qint8(1); file.flush();
QVector<int> Id3(LEN), Qd3(LEN); //输出滤波后的数据 for (int j = 0; j < LEN; j++) { Id3[j] = mathfunc.fix(temp1_iq.real[j + lbn]); Qd3[j] = mathfunc.fix(temp1_iq.imag[j + lbn]); out << ReverseOrder(qint16(Id3[j])); out << ReverseOrder(qint16(Qd3[j])); } file.flush(); file.close();
Read
QFile file(Rpath); if (!file.open(QFile::ReadOnly)) { qDebug() << "Could not open file for reading"; return; } qint8 obj_num; qint8 rat; qint16 dd; qint16 L; QDataStream MyRead(&file); MyRead >> obj_num; MyRead >> rat; MyRead >> dd; MyRead >> L; qDebug() << ReverseOrder(obj_num) << ReverseOrder(rat) << ReverseOrder(dd) << ReverseOrder(L);
C原生API:FILE(fopen,fread,fseek,fwrite)
分析;
完美符合需求,也是matlab的读二进制文件的实际方法,只不过matlab应该是对原来的api进行了重载,功能大差不错
//QString 类型转换 const char * QByteArray ba1; ba1.append(Rpath); const char *rpath = ba1.data(); FILE * rfid = fopen(rpath, "rb"); if (rfid == NULL) { QString theLog = "没有成功打开" + filename + "文件"; QMessageBox::warning(this, "警告!", theLog); return; } fseek(rfid, 0, 2); int Blen = ftell(rfid); fseek(rfid, 0, 0); UINT8 obj_num; UINT8 rat; UINT16 dd; UINT16 L; //fread(存放地址,单个数据的字节数,读几个数据,文件柄) 返回值为0或1 fread(&obj_num, sizeof(UINT8), 1, rfid); fread(&rat, sizeof(UINT8), 1, rfid); fread(&dd, sizeof(UINT16), 1, rfid); fread(&L, sizeof(UINT16), 1, rfid); printf("%d\n ", obj_num); printf("%d\n ", rat); printf("%d\n ", dd); printf("%d\n ", L);
逐字节以规定字节数写入:
//解决中文路径乱码 //Wpath是你的文件路径 QTextCodec *code = QTextCodec::codecForName("GB2312"); std::string name = code->fromUnicode(Wpath).data(); FILE * wfid = fopen(name.c_str(), "wb"); //单个数据 int buf = 1; int buf1 = 1000000; int buf2 = 0; fwrite(&buf, 1, 1, wfid); //01 fwrite(&buf, 1, 1, wfid); //01 fwrite(&buf1, 4, 1, wfid); //40 42 0F 00 fwrite(&buf2, 4, 1, wfid); //00 00 00 00 fwrite(&buf2, 4, 1, wfid); //00 00 00 00 fwrite(&buf, 1, 1, wfid); //01 //一个数组 data是你的数据,LEN是你的数组长度 INT16 *outD = new INT16[LEN]; //输出滤波后的数据 for (int j = 0; j < LEN; j++) { outD[j] = data[j]; } //写文件 fwrite(outD, sizeof(INT16), LEN, wfid); //清理内存空间 delete outD;
C++API:ofstream
Write;
std::ofstream ofs(name.c_str(), std::ios::out | std::ios::binary); //创建输出流对象 int buf = 1; int buf1 = mathfunc.fix(FSO); int buf2 = 0; ofs.write((const char*)&buf, sizeof(buf));//写文件 ofs.write((const char*)&buf, sizeof(buf));//写文件 ofs.write((const char*)&buf1, sizeof(buf1));//写文件 ofs.write((const char*)&buf2, sizeof(buf2));//写文件 ofs.write((const char*)&buf2, sizeof(buf2));//写文件 ofs.write((const char*)&buf, sizeof(buf));//写文件 ofs.flush(); ofs.close();
Windons API:CreateFileA,GetFileSize,ReadFile
分析:
1.完美满足需求 2.思路:先将数据全部读进来,再以指针寻址的方式将对应的数据以对应字节数取出,方便易用
char* Vsqt::MyOpenFile(QString path) { char* fileBuff; // 解决中文路径 QTextCodec *code = QTextCodec::codecForName("GB2312"); std::string name = code->fromUnicode(path).data(); HANDLE hFile = ::CreateFileA(name.c_str(), GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); fileSize = ::GetFileSize(hFile, 0); fileBuff = new char[fileSize]; DWORD realRead; bool bsucess = 0; bsucess = ::ReadFile(hFile, fileBuff, fileSize, &realRead, NULL); if (!bsucess) return 0; CloseHandle(hFile); return fileBuff; }
char *fileBuff = MyOpenFile(Rpath); //读取全部数据 if (fileBuff == 0) { QString theLog = "没有成功打开" + filename + "文件"; QMessageBox::warning(this, "Warning!", theLog); return; } int obj_num = *(BYTE*)fileBuff; int rat = *(BYTE*)(fileBuff + 1); int dd = *(WORD*)(fileBuff + 2); int L = *(WORD*)(fileBuff + 4); int Blen = fileSize; cout << obj_num << endl << rat << endl << dd << endl << L << endl;
其他
注意:当我们的数据不知道是正数还是负数时且字节数不够表达这个数时我们需要像如下的操作:
vector<double> ys_da; // 里面为要计算的数据,一个数据为2个字节 //处理计算数据,判断正负进行 for (int i = 0; i < wlen; i++) { if ((*(WORD*)fileBuff & 0x8000) == 0) //正数 ys_da.push_back(*(WORD*)fileBuff); else { //负数 ys_da.push_back((INT32)(*(WORD*)fileBuff | 0xFFFF0000)); } fileBuff = fileBuff + 2; }
注意
该文章仅个人学习使用,欢迎大家一起交流学习
-
Qt 读取16进制的data文件
2017-08-11 00:38:32vs中有格式化输入,qt中也有自己的,适合新手 -
QT 二进制文件读写小结
2021-09-03 12:28:55有些数据存储,用明文的形式可能不太好,比如账号密码信息等。所以采取二进制存储就成为了一种新的靠谱选择。本文介绍的是在QT环境下二进制文件的读写的一些技巧和注意事项。一般而言,用于二进制流的QDataStream和用于文本流的QTextStream。本次讲解QDataStream有关的使用以及一些技巧。
QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。例如,在安装了 Windows 平台的 PC 上面写入的一个数据流,可以不经过任何处理,直接拿到运行了 Solaris 的 SPARC 机器上读取。由于数据流就是二进制流,因此我们也可以直接读写没有编码的二进制数据,例如图像、视频、音频等。
有些数据存储,用明文的形式可能不太好,比如账号密码信息等。所以采取二进制存储就成为了一种新的靠谱选择。本文介绍的是在QT环境下二进制文件的读写的一些技巧和注意事项。
#include <QtCore/QCoreApplication> #include <QDataStream> #include <QFile> #include <QDir> #include <QDebug> namespace { const qint32 FILE_VERSION = 1000; const quint32 MAGIC_NUMBER = 0xA8B8C8D8; } int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); // QString fileName = QString(QDir::tempPath() + "/__bin.dat"); // // write binary file. QFile fileWriter(fileName); if (fileWriter.open(QIODevice::WriteOnly)) { QDataStream out(&fileWriter); // 写入魔术数字 out << (quint32)MAGIC_NUMBER; // 写入文件版本 out << (qint32)FILE_VERSION; // 写入QT版本 out.setVersion(QDataStream::Qt_5_9); // out << QString("hellokandy"); out << QString("password"); } fileWriter.close(); // // read binary file. QFile fileReader(fileName); if (!fileReader.exists()) { fileReader.close(); qDebug() << "file not exist."; return 0; } if (fileReader.open(QIODevice::ReadOnly)) { QDataStream in(&fileReader); // 检查魔术数字 quint32 magicNumber; in >> magicNumber; qDebug() << "magic=" << magicNumber; if (magicNumber != MAGIC_NUMBER) { qDebug() << "data format error."; return 0; } // 检查文件版本 qint32 fileVersion; in >> fileVersion; qDebug() << "fileVersion=" << fileVersion; if (fileVersion != FILE_VERSION) { qDebug() << "file version error."; return 0; } // 读取用户名 QString username; in >> username; qDebug() << "username=" << username; // 读取密码 QString password; in >> password; qDebug() << "password=" << password; } fileReader.close(); return a.exec(); }
-
24、QT 二进制文件读写
2022-05-01 16:55:07//打开二进制文件 public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private slots: void on_currentChanged(const QModelIndex ¤t, const QModelIndex &previous); void on_actOpen_... -
QT二进制读取和写入文件
2022-03-10 14:16:03QByteArray total_file; QFile file("C:\\Users\\star\\Desktop\\111.aedt"); int flag=file.open(QIODevice:... in.setVersion(QDataStream::Qt_5_15); QFileInfo fileInfo("C:\\Users\\star\\Desktop\\111.aedt"); -
QT读取二进制文件
2017-05-23 23:07:52void MainWindow::ReadPicture() { QByteArray m_data; QFile file("H:/BaiduYunDownload/Cache/test.jpg"); if(file.open(QIODevice::ReadOnly)) { m_data = file.readAll(); cout -
Qt二进制文件操作(读和写)详解
2021-01-21 04:35:21除了文本文件之外,其他需要按照一定的格式定义读写的文件都称为二进制文件。每种格式的二进制文件都有自己的格式定义,写入数据时按照一定的顺序写入,读出时也按照相应的顺序读出。例如地球物理中常用的 SEG-Y ... -
Qt读取以16进制存储的二进制文件
2018-07-04 18:51:48首先清楚二进制文件常见格式 .bin .hex 读取方法使用Qt File 打开 然后使用QDataStream进行读取文本文件常见格式 .txt读取方法使用Qt File 打开 然后使用QTextStream进行读取源码QString fileName = QFileDialog::... -
qt以二进制流的方式存储数据,稳定高效,解决QDataStream多余存储数据长度问题
2021-06-28 17:39:43为什么使用二进制流呢,因为比较通用,不管是任何系统,不限制于任何系统,都能读写二进制数据文件,此方式也是对于大数据较快的一种,就比如之前用过刷新图片,图片格式为jpg,png等,是有算法解码才能解读的, 而... -
Qt写二进制文件头部多出四个字节问题解决
2018-12-29 17:17:54在linux系统下用qt写二进制文件时,使用QDataStream类进行存储文件。结果查看到每次写入都会在头部多出四个字节的长度。如下图所示: 问题分析 写入二进制文件代码如下: QFile file(m_File); if (!file.open... -
将结构体写入二进制文件
2018-02-02 13:27:05将结构体数据写入二进制文件,从二进制文件中读取结构体数据 -
Qt5--文件操作(2)读写二进制文件
2019-02-17 11:17:32一般二进制文件都会有这么一个魔术数字,例如 Java 的 class 文件的魔术数字就是 0xCAFEBABE,使用二进制查看器就可以查看。魔术数字是一个 32 位的无符号整型,因此我们使用quint32来得到一个平台无关的 32 位无... -
qt sql中二进制文件通过QByteArray读写
2021-03-07 01:54:10qt sql中二进制文件通过QByteArray读写从数据库到文件QSqlQuery myquery( *pDatabase);QByteArray myba;if(myquery.exec(sql)){QSqlRecord myrecord = myquery.record();if (myquery.next()) {myba = myquery.value... -
QT----文件的读取,写入,保存;二进制、配置文件的读写
2022-04-16 16:00:081.文件的读取与显示 (关于使用到的函数,大家可以在帮助手册里面查看) ...设置文件对话框(QT内置对话框),获取文件名 读取文件,显示文件内容到窗口 实现 方式1 #include "Csdnmainwindow.h" #include -
Qt QDataStream二进制文件读写
2020-03-21 16:50:44QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。例如,在安装了 Windows 平台的 PC 上面写入的一个数据流,可以不... -
32 QT - 二进制文件读写
2019-10-18 16:22:49QDataStream提供了基于QIODevice的二进制数据的序列化。数据流是一种二进制流,这种流’完全不依赖于底层操作系统、CPU 或者字节顺序(大端或小端)。例如,在安装了 Windows 平台的 PC 上面写入的一个数据流,可以... -
Qt 学习 之 二进制文件读写
2015-06-11 16:59:26同时,Qt 还提供了更高一级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataStream的使用以及一些技巧。下一章则是QTextStream的相关内容。QDataStream提供了基于Q -
二进制文件转CSV文件
2020-04-27 22:44:19采用Qt实现二进制文件转CSV文件,主要功能如下: 1.包含操作界面; 2.适用于小端模式的数据格式; 3.可读取的数据文件格式为char、short、int、float、double以及无符号型数据; 4.可实现多通道数据分列存储; 5.... -
初识QT(四十七)——Qt二进制文件操作(读和写)详解
2019-10-30 15:19:35除了文本文件之外,其他需要按照一定的格式定义读写的文件都称为二进制文件。 每种格式的二进制文件都有自己的格式定义,写入数据时按照一定的顺序写入,读出时也按照相应的顺序读出。 例如地球物理中常用的 SEG-Y ... -
qt下使用sqlite数据库存储二进制文件
2016-05-21 14:53:11qt下sqlite数据库存储和查询二进制数据 -
Qt二进制文件操作(读和写)详解(.stm和.dat文件)
2020-02-04 21:20:10除了文本文件之外,其他需要按照一定的格式定义读写的文件都称为二进制文件。 每种格式的二进制文件都有自己的格式定义,写入数据时按照一定的顺序写入,读出时也按照相应的顺序读出。 例如地球物理中常用的 SEG-Y ... -
Qt之文件详解(二)二进制文件读写
2017-02-08 14:48:36同时,Qt 还提供了更高一级的操作:用于二进制的流QDataStream和用于文本流的QTextStream。本节,我们将讲解有关QDataStream的使用以及一些技巧。下一章则是QTextStream的相关内容。 QDataStream提 -
Qt保存JSON类型的文件或者json二进制文件
2021-12-14 22:14:40Qt对JSON文件操作,包括json的二进制文件