首页 > 编程语言 >C++读写二进制文件

C++读写二进制文件

时间:2022-12-05 16:48:01浏览次数:34  
标签:fp const 二进制 读写 C++ filename char data size


方法一:

#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>

//

  size_t readBinaryFile(const char *filename, unsigned char *&data)
  {
    FILE *fp;
    fopen_s(&fp, filename, "rb");
    if (fp == NULL)
    {
      return 0; //空指针则返回0,文件打开失败
    }
    fseek(fp, 0, SEEK_END);  //将文件指针移动至文件末尾
    size_t size = ftell(fp); //计算文件大小,单位:Byte
    fseek(fp, 0, SEEK_SET);  //把文件指针移回初始位置(文件开头)
    data = (unsigned char *)malloc(sizeof(unsigned char) * size);
    fread(data, size, 1, fp);
    fclose(fp);
    return size;
  }

  size_t readBinaryFile(const char *filename, char *&data)
  {
    FILE *fp;
    fopen_s(&fp, filename, "rb");
    if (fp == NULL)
    {
      return 0; //空指针则返回0,文件打开失败
    }
    fseek(fp, 0, SEEK_END);  //将文件指针移动至文件末尾
    size_t size = ftell(fp); //计算文件大小,单位:Byte
    fseek(fp, 0, SEEK_SET);  //把文件指针移回初始位置(文件开头)
    data = (char *)malloc(sizeof(char) * size);
    fread(data, size, 1, fp);
    fclose(fp);
    return size;
  }

  size_t writeBinaryFile(const char *filename, const unsigned char *data, size_t size)
  {
    FILE *fp;
    fopen_s(&fp, filename, "wb");
    if (fp == NULL)
    {
      return 0;
    }
    size_t written_size = fwrite(data, size, 1, fp);
    fclose(fp);
    return written_size;
  }

  size_t writeBinaryFile(const char *filename, const char *data, size_t size)
  {
    FILE *fp;
    fopen_s(&fp, filename, "wb");
    if (fp == NULL)
    {
      return 0;
    }
    size_t written_size = fwrite(data, size, 1, fp);
    fclose(fp);
    return written_size;
  }


方法二:

#include <stdio.h>
#include <stdlib.h>
#include <fstream>
#include <string>

  template <typename OB>
  inline void saveObject(const char *filename, OB &object) //传入要保存的对象引用
  {
    std::ofstream osm(filename, ios::out | ios::binary);
    osm.write((const char *)&object, sizeof(OB));
    osm.close();
  }

  template <typename OB>
  inline void readObject(const char *filename, OB *object) //传入读取之后对象存储的指针
  {
    std::ifstream ism(filename, ios::in | ios::binary);
    ism.read((char *)object, sizeof(OB));
    ism.close();
  }


//

标签:fp,const,二进制,读写,C++,filename,char,data,size
From: https://www.cnblogs.com/gispathfinder/p/16952688.html

相关文章

  • C++接口工程实践
    https://zhuanlan.zhihu.com/p/213902091还没有学习完简介:程序开发的时候经常会使用到接口。众所周知,C++语言层面并没有接口的概念,但并不意味着C++不能实现接口的功能。......
  • node js解码base回二进制
    直接贴代码icon_file=icon_file.split(',')[1]icon_file=Buffer.from(icon_file,'base64')icon_file=icon_file.toString('binary')注意:ba......
  • 后端返回二进制内容时 $.ajax请求返回乱码问题
    前端通过jQueryajax接受后端的文件流,前端下载文件后内容乱码原因分析:jQueryajaxresponse类型只能是:xml,html,script,json,jsonp,text。无法接受blob类型的response。当......
  • 在c#中调用c++的dll崩溃了,try catch 怎么获取异常?
    在framework框架下,通过添加HandleProcessCorruptedStateExceptionsAttribute属性来解决这个问题,(.netcore1.0到3.1之前,不支持从损坏的进程状态异常中恢复,即trycatch没有......
  • C++ IMPL模式解析(下)
    二进制兼容在上一章结尾处提到了二进制兼容的概念,这里先说说二进制兼容的问题。为什么是二进制兼容简单说,就是我的可执行程序调用你的动态库(so/dll),若动态库发生改动,我......
  • c++ vector resize 和 assign
    resize改变大小resize(n,value),不够的部分填充为valuevector<int>nums{1,2,3,4,5,6};nums.resize(3,100);//size缩小,保持原状->{1,2,3}nums.resi......
  • C++获取一年中所有周信息
    std::map<int,std::pair<CTime,CTime>>YearOfWeek(intyear){std::map<int,std::pair<CTime,CTime>>weekMap;CTimetime(year,1,1,0,0,0);in......
  • Linux 下 hwclock 读写 RTC 报错 Invalid argument
    以上错误信息都是因为year设置不当引起的。没有设置RTC,RTC也不会启动计时。下面首先设置正确的系统时间,然后将系统时间传递给RTC。tm里的tm_year是从1900年开始算的,如要......
  • VC6.0和VS2005:C++和C#编写调用COM组件
    这篇文章就是关于COM组件的编写和调用的,主要包含了使用VC6.0编写和调用COM组件,VS2005中使用C#编写和调用COM组件,以及在VC6.0和VS2005之间互相调用COM组件。前一阵在......
  • c++ hello world
    //myfirst.cpp--displaysamessage#include<iostream>//aPREPROCESSORdirectiveintmain()//functionheader{......