欢迎关注我的公众号 [极智视界],获取我的更多笔记分享
O_o >_< o_O O_o ~_~ o_O
本文介绍一下 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++ 调用
/// 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(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(buf); // write binFile std::string saveFilePath= "./demo_saved.bin"; writeBin(saveFilePath, buf, size); delete buf;
以上介绍了 C 语言和 C++ 读、存 bin 文件的方法,有需要的同学可以拿去使用。
【公众号传送】
《【编程艺术】C 和 C++ 读存 bin 文件方法》
扫描下方二维码即可关注我的微信公众号【极智视界】,获取更多AI经验分享,让我们用极致+极客的心态来迎接AI !



