IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> bin文件读写 - C/C++ -> 正文阅读

[C++知识库]bin文件读写 - C/C++

本文介绍一下 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();
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-14 09:47:23  更:2022-05-14 09:47:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 18:30:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码