龙空技术网

「编程艺术」C 和 C++ 读存 bin 文件方法

无极Panamera 167

前言:

现时我们对“c语言open fopen”大概比较关注,大家都想要分析一些“c语言open fopen”的相关资讯。那么小编也在网上搜集了一些有关“c语言open fopen””的相关知识,希望我们能喜欢,你们快快来学习一下吧!

欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

O_o>_<o_OO_o~_~o_O

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

  bin 文件的存取在调试网络推理定位问题的时候可能会经常用到,如在这个框架里网络输出和预期对不上,经常需要把这个网络里的前处理输出、网络推理输出搬到另外的框架里走一遍,来确定是前处理有问题,还是网络推理有问题,还是后处理有问题。这里分享一下 C 语言和 C++ 读取和保存特征数据为 bin 文件的方法。其实大部分情况可以用 C++ 搞定,但如 darknet 这种纯 C 框架可能就需要用 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 binFilechar filePath[] = "./demo.bin";int size = GetBinSize(filePath);char *buf = (char*)malloc(size);readBin(filePath, buf, size);float *fbuf = (float*)buf;// write binFilechar 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 binFilestd::string filePath= "./demo.bin";int size = GetBinSize(filePath);char *buf= new char[size];readBin(filePath, buf, size);float *fbuf = reinterpret_cast<float *>(buf);// write binFilestd::string saveFilePath= "./demo_saved.bin";writeBin(saveFilePath, buf, size);delete buf;

  以上介绍了 C 语言和 C++ 读、存 bin 文件的方法,有需要的同学可以拿去使用。

【公众号传送】

《【编程艺术】C 和 C++ 读存 bin 文件方法》

标签: #c语言open fopen