参考网址:
https://www.devbean.net/2013/01/qt-study-road-2-binary-file-io/
https://blog.csdn.net/chenyijun/article/details/70653850
主要用到两个类:
- 读二进制 QDataStream
用skipRawData(skipStep)来跳过skipStep个字节;
用readRawData((char*)&tmp[0],sizeof(float)*ns)来读取ns个字节并存入tmp中。 - 写txt文本格式 QTextStream
将tmp中取出来的数值导入out中,输出到txt文件。
QTextStream out(&outFile);
for(int i = 0 ;i < ns ;i++)
{
out << tmp[i] << endl;
}
out.flush();
具体测试如下:
//1)通过QDataStream读入数值
int skipStep = 200;//跳过200个样点
int ns = 100;//取100个样点
QString inFileName="D:\\MyProgram\\ReadDat\\1018.dat";
QFile inFile(inFileName);
if(!(inFile.open(QIODevice::ReadOnly)))//打开二进制文件
{
QMessageBox::critical(nullptr, "notice", "open file error");
return;
}
QDataStream in(&inFile);
in.skipRawData(skipStep);//跳过skipStep个样点
in.setByteOrder(QDataStream::BigEndian);
QVector<float> tmp;
tmp.resize(ns);
in.readRawData((char*)&tmp[0],sizeof(float)*ns);//取ns个数据放入tmp
for(int i=0 ;i<ns;i++)
{
// Exchange32((char *)&tmp[i]);//大小端转换
qDebug()<<tmp[i];
}
//2)通过QTextStream 导出txt数据
QString outFilePath = "D:\\MyProgram\\ReadDat\\chn1.txt";
QFile outFile(outFilePath);
//方式: Append为追加, WriteOnly只写, ReadOnly只读,Truncate表示的是 将原文件内容清空,
//如果在工程文件下没有chn1_N.txt文件,那么程序将创建该文件,若存在,则将原文件内容清空,
if(!outFile.open(QIODevice::WriteOnly |QIODevice::Truncate| QIODevice::Text))
{
QMessageBox::critical(nullptr, "tips", "create file error");
return;
}
QTextStream out(&outFile); //把数据写到文件中
for(int i=0 ;i<ns;i++)
{
out << tmp[i] << endl;
}
out.flush();
outFile.close(); //写完关闭文件
inFile.close();//关闭输入文件