C++实战之二进制数据处理与封装

C++实战之二进制数据处理与封装

本文主要介绍C++中二进制数据的处理与封装的相关知识,包括二进制文件处理、封装、读写二进制数据等方面。

一、二进制文件处理

  1. 打开二进制文件
#include <iostream>
#include <fstream>
using namespace std;

int main() {
  //打开二进制文件
  ifstream fin("test.bin", ios::binary);

  if (fin) {
    cout << "Open file success." << endl;
  } else {
    cout << "Open file fail." << endl;
  }

  fin.close(); //关闭文件
  return 0;
}

在打开文件时,需要设置打开模式为ios::binary,用于指明以二进制模式打开。

  1. 读取二进制文件
#include <iostream>
#include <fstream>
using namespace std;

int main() {
  ifstream fin("test.bin", ios::binary);

  if (fin) {
    // 获取文件大小
    fin.seekg(0, ios::end); // 定位到文件结尾
    int fileSize = fin.tellg(); // 获取当前位置,即文件大小
    fin.seekg(0, ios::beg); // 定位到文件开头

    // 读取文件内容
    char* buffer = new char[fileSize]; // 用于存储文件内容的缓冲区
    fin.read(buffer, fileSize); // 读取文件内容
    fin.close(); // 关闭文件

    // 处理文件内容
    // ...

    delete[] buffer; // 释放缓冲区
  } else {
    cout << "Open file fail." << endl;
  }

  return 0;
}

首先,需要通过seekg函数将文件指针定位到文件开头,获取文件大小,再次定位到文件开始位置,然后开辟相应大小的缓冲区读取文件内容。

  1. 写入二进制文件
#include <iostream>
#include <fstream>
using namespace std;

int main() {
  ofstream fout("test.bin", ios::binary);

  if (fout) {
    // 写入文件内容
    int data = 100;
    fout.write((char*)&data, sizeof(int)); // 写入整型数据

    fout.close(); // 关闭文件
  } else {
    cout << "Open file fail." << endl;
  }

  return 0;
}

使用ofstream类创建文件,并设置打开模式为ios::binary,将数据写入文件。

二、封装二进制数据

在C++中,struct和class均可用来封装二进制数据。

示例1:封装整型数据

#include <iostream>
#include <fstream>
using namespace std;

class Int {
public:
  Int() {}
  Int(int v) : value(v) {}

  int value;
};

int main() {
  ofstream fout("test.bin", ios::binary);

  if (fout) {
    Int data(100); // 封装数据
    fout.write((char*)&data, sizeof(Int)); // 写入数据

    fout.close(); // 关闭文件
  } else {
    cout << "Open file fail." << endl;
  }

  return 0;
}

定义一个Int类,封装整型数据,并通过write函数将数据写入文件。

示例2:封装结构体

#include <iostream>
#include <fstream>
using namespace std;

struct Student {
  int id;
  float score;
};

int main() {
  ofstream fout("test.bin", ios::binary);

  if (fout) {
    Student stu = { 1, 90.5 }; // 封装数据
    fout.write((char*)&stu, sizeof(Student)); // 写入数据

    fout.close(); // 关闭文件
  } else {
    cout << "Open file fail." << endl;
  }

  return 0;
}

定义一个结构体Student,并通过write函数将数据写入文件。

三、读写二进制数据

使用read函数和write函数可实现二进制数据的读写操作。

示例1:读取整型数据

#include <iostream>
#include <fstream>
using namespace std;

class Int {
public:
  Int() {}
  Int(int v) : value(v) {}

  int value;
};

int main() {
  ifstream fin("test.bin", ios::binary);

  if (fin) {
    Int data; // 定义变量
    fin.read((char*)&data, sizeof(Int)); // 读取数据
    fin.close(); // 关闭文件

    cout << data.value << endl; // 输出数据
  } else {
    cout << "Open file fail." << endl;
  }

  return 0;
}

使用read函数读取数据,并将数据存储到变量中,最后输出数据。

示例2:读取结构体数据

#include <iostream>
#include <fstream>
using namespace std;

struct Student {
  int id;
  float score;
};

int main() {
  ifstream fin("test.bin", ios::binary);

  if (fin) {
    Student stu; // 定义变量
    fin.read((char*)&stu, sizeof(Student)); // 读取数据
    fin.close(); // 关闭文件

    cout << stu.id << " " << stu.score << endl; // 输出数据
  } else {
    cout << "Open file fail." << endl;
  }

  return 0;
}

使用read函数读取数据,并将数据存储到变量中,最后输出数据。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实战之二进制数据处理与封装 - Python技术站

(0)
上一篇 2023年6月25日
下一篇 2023年6月25日

相关文章

  • Android UI 中的 ListView列表控件的示例

    下面我将为您详细讲解“Android UI 中的 ListView 列表控件的示例”的完整攻略。 1. ListView 列表控件简介 ListView 是 Android 开发中最常用的列表控件之一,它可以用来展示大量的数据列表。ListView 的每一项都是一个 View 对象,可以包含多种不同的控件,如文本、按钮、图像等,用于显示相关数据。ListVi…

    other 2023年6月27日
    00
  • ubuntu20.04右键怎么添加创建链接文件快捷方式?

    下面是完整的攻略: 1. 打开Nautilus文件资源管理器 首先,我们需要打开Ubuntu 20.04系统中的Nautilus文件资源管理器。可以通过以下方式打开: 点击左上角的“Activities”图标,在搜索栏中输入“文件”或“Nautilus”,点击出现的Nautilus图标即可打开。 或者按下“Ctrl + Alt + T”组合键打开终端,输入“…

    other 2023年6月27日
    00
  • OpenCV-Python 理解特征 | 三十六

    OpenCV-Python 理解特征|三十六的完整攻略 本文将为您提供 OpenCV-Python 理解特征|三十六的完整攻略,包括介绍、特征提取和两个示例说明。 介绍 在计算机视觉领域,特征是指图像或视频中的可识别的局部结构,如角点、边缘、斑点等。特征提取是计算机视觉中的重要任务之一,可以用于图像匹配、目标跟踪、三维重建等应用。OpenCV-Python …

    other 2023年5月6日
    00
  • vue-cli3.0 特性解读

    Vue CLI 3.0 特性解读 Vue CLI 3.0 是一个基于 Vue.js 的官方脚手架工具,它提供了一套完整的开发环境,帮助开发者快速搭建 Vue.js 项目。下面将详细解读 Vue CLI 3.0 的特性,并提供两个示例说明。 1. 配置文件可视化 Vue CLI 3.0 引入了一个全新的可视化配置文件,使得开发者可以直观地配置项目。通过运行 v…

    other 2023年7月29日
    00
  • win7系统鼠标右键没响应怎么办?win7系统浏览网页点击鼠标右键没反应的两种解决方法

    针对win7系统鼠标右键没响应的问题,以下是两种解决方法: 方法一:检查鼠标驱动 鼠标右键无响应的情况,第一步需要检查鼠标驱动是否正常,可以尝试以下步骤: 在桌面上单击“计算机”图标; 展开控制面板,选择“设备管理器”; 在设备管理器的“鼠标和其他指向设备”下,找到你的鼠标,右键选择“属性”; 在属性窗口中选择“驱动程序”选项卡,然后选择“更新驱动程序”; …

    other 2023年6月27日
    00
  • win10预览版10154下载 win10预览版10154官方下载地址

    Win10预览版10154下载攻略 Win10预览版10154是Windows 10操作系统的一个预览版本,本攻略将详细介绍如何下载和安装该版本,并提供官方下载地址。以下是完整的攻略过程: 步骤一:访问官方网站 首先,打开你的浏览器,并访问Windows官方网站。你可以在浏览器的地址栏中输入以下网址:https://www.microsoft.com/zh-…

    other 2023年8月4日
    00
  • stompjs使用文档总结

    stompjs使用文档总结 简介 StompJS 是一个用于浏览器和 Node.js 的简单、有效且易于使用的 STOMP 客户端。 STOMP 是一种流行的文本协议,用于通过消息队列传输协议(例如 Apache ActiveMQ,RabbitMQ 等)进行异步消息传递。 此客户端基于 Websockets(在现代浏览器中)或 AJAX 长轮询(在较旧浏览器…

    其他 2023年3月29日
    00
  • 深入分析C++中声明与定义的区别

    深入分析C++中声明与定义的区别 在C++中,声明和定义都是C++语言中的重要概念,它们指的是编程中使用变量、函数、类等元素时的两种不同的操作。这两个概念在程序中有着不同的作用,因此C++程序员需要清楚它们之间的区别。 声明和定义的区别主要体现在以下几个方面: 1.含义 声明:仅是向编译器声明某个变量、函数或类的存在,告诉编译器该变量、函数或类在当前代码文件…

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部