本文介绍一下 C 和 C++ 读取和保存 bin 文件的方法。

  bin
文件的存取在调试网络推理定位问题的时候可能会经常用到,如在这个框架里网络输出和预期对不上,经常需要把这个网络里的前处理输出、网络推理输出搬到另外的框架里走一遍,来确定是前处理有问题,还是网络推理有问题,还是后处理有问题。这里分享一下
C 语言和 C++ 读取和保存特征数据为 bin 文件的方法。其实大部分情况可以用 C++ 搞定,但如 darknet 这种纯 C 框架可能就需要用 C
实现。文章目录
1、C 读取和保存 bin 文件
1.1 C 读取
1.2 C 保存
1.3 C 调用
2、C++ 读取和保存 bin 文件
2.1 C++ 读取
2.2 C++ 保存
2.3 C++ 调用
1、C 读取和保存 bin 文件
1.1 C 读取
/// C 读取bin文件
int getBinSize(char *path) {     int  size = 0;     FILE  *fp = fopen(path,
"rb");     if (fp)     {         fseek(fp, 0, SEEK_END);         size =
ftell(fp);         fclose(fp);     }     printf("\npath=%s,size=%d \n", path,
size);     return size; } void readBin(char *path, char *buf, int size) {    
FILE *infile;     if ((infile = fopen(path, "rb")) == NULL)     {        
printf("\nCan not open the path: %s \n", path);         exit(-1);     }    
fread(buf, sizeof(char), size, infile);     fclose(infile); }

1.2 C 保存
/// C 保存bin文件
void writeBin(char *path, char *buf, int size) {     FILE *outfile;     if
((outfile = fopen(path, "wb")) == NULL)     {         printf("\nCan not open
the path: %s \n", path);         exit(-1);     }     fwrite(buf, sizeof(char),
size, outfile);     fclose(outfile); }

1.3 C 调用
// read binFile char filePath[] = "./demo.bin"; int size =
GetBinSize(filePath); char *buf = (char*)malloc(size); readBin(filePath, buf,
size); float *fbuf = (float*)buf; // write binFile char saveFilePath[] =
"./demo_saved.bin" writeBin(saveFilePath, buf, size) free(buf)
2、C++ 读取和保存 bin 文件
2.1 C++ 读取
/// C++ 读取bin文件 void getBinSize(std::string path) {     int size = 0;    
std::ifstream infile(path, std::ifstream::binary);          infile.seekg(0,
infile.end);     int size= infile.tellg();     infile.seekg(0, infile.beg);  
       infile.close();     printf("\npath=%s,size=%d \n", path, size);    
return size; } void readBin(std::string path, char *buf, int size) {  
std::ifstream infile(path, std::ifstream::binary);  
infile.read(static_cast<char *>(buf), size);   infile.close(); }

2.2 C++ 保存
/// C++ 保存bin文件 void writeBin(std::string path, char *buf, int size) {  
std::ofstream outfile(path, std::ifstream::binary);   outfile.write((char
*)(buf), size);   outfile.close(); }

2.3 C++ 调用
// read binFile std::string filePath= "./demo.bin"; int size =
GetBinSize(filePath); char *buf= new char[size]; readBin(filePath, buf, size);
float *fbuf = reinterpret_cast<float *>(buf); // write binFile std::string
saveFilePath= "./demo_saved.bin"; writeBin(saveFilePath, buf, size); delete buf;

2. 文件读出成char
//C方式, 调用的函数繁多 //fopen,fseek,ftell,fseek,malloc,fread,fclose,free. void foo()
{ FILE* fp=fopen(sFileName,"rb"); fseek(fp,0,SEEK_END); int len = ftell(fp);
fseek(fp,0,SEEK_SET); char* s = (char*)malloc(len); fread(s,1,len,fp);
fclose(fp); fwrite(s,1,len,stdout);//output free(s); } //C++方式,易懂 void foo() {
ifstream fs(sFileName.c_str(),ios::binary); stringstream ss ; ss << fs.rdbuf();
fs.close(); string str = ss.str();//read into string } //C++方式,高大上
//string的构造用了一个模版函数 void foo() { std::ifstream ifs(sFileName.c_str());
std::string str((std::istreambuf_iterator<char>(ifs)),
std::istreambuf_iterator<char>(0)); ifs.close(); }

技术
下载桌面版
GitHub
Gitee
SourceForge
百度网盘(提取码:draw)
云服务器优惠
华为云优惠券
腾讯云优惠券
阿里云优惠券
Vultr优惠券
站点信息
问题反馈
邮箱:[email protected]
吐槽一下
QQ群:766591547
关注微信