QT中 C++读取.bin文件
1 .h文件中
#include <fstream>
#include <iostream>
#include <sstream>
#include <string>
#include <cstring>
#include <QTextCodec>
using namespace std;
inline std::string QS2S(QString qs);
inline QString S2QS(std::string s);
inline QString DecToHex(const u16 &uDecData); //十进制转十六进制
2 .cpp文件中
std::string FormConversionTool::QS2S(QString qs)
{
return qs.toStdString();
}
QString FormConversionTool::S2QS(std::string cs)
{
return QString::fromStdString(cs);
}
QString FormConversionTool::DecToHex(const u16 &uDecData)
{
QString qstrHex;
qstrHex = QString::number(uDecData,16);
if(qstrHex.length() == 1)
{
qstrHex = "0" + qstrHex;
}
return qstrHex;
}
QString qstrPath = ui->lineEdit_FilePath_Intput->text(); //获取控件上的文件路径。此处可自定义。
//C++方式读取二进制文件
// open the file:
std::streampos fileSize; //实例化fpos用于表示窄向流中的位置。
QTextCodec *code = QTextCodec::codecForName("GB2312"); //解决中文路径问题
std::ifstream file(code->fromUnicode(qstrPath).data(), std::ios::binary);
//指向二进制文件内存的头指针
void *bufPtr=0;
//每个pillar 的点云数量
int pointNum=30;
//点云数据的列数,x,y,z,r,其他
int pointDim=5;
cout<<"start"<<endl;
cout<<"file="<<!file<<endl;
if (!file)
{
cout<<"!file"<<endl;
return;
}
// get its size:
//把文件的读指针结尾位置向后移前个字节
file.seekg(0, std::ios::end);
fileSize = file.tellg();
//把文件的写指针从文件开头向后移 0 个字节
file.seekg(0, std::ios::beg);
bufPtr = malloc(fileSize);
if(bufPtr == nullptr)
{
cout<<"error"<<endl;
return;
}
// read the data:
cout<<"read_data"<<endl;
file.read((char*) bufPtr, fileSize);
unsigned char* p = (unsigned char*)bufPtr;
unsigned char uData;
QString qstrData;
QVector<QString> qvecFileData; //加载.bin文件获得的数据
for(int i = 0;i < fileSize;i++)
{
uData = p[i];
qstrData = DecToHex((unsigned short)uData);
cout<< QS2S(qstrData) <<endl;
qvecFileData.append(qstrData);
}
file.close();
cout<<"size="<<fileSize<<endl;
pointNum = fileSize /sizeof(float) / pointDim;
cout<<pointNum<<endl;
if( fileSize /sizeof(float) % pointDim != 0);
free(bufPtr);
3.参考链接 c++ 读取二进制bin文件
https://blog.csdn.net/luoganttcc/article/details/123036087?utm_medium=distribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-123036087-blog-79825925.pc_relevant_default&spm=1001.2101.3001.4242.1&utm_relevant_index=3