教程 cpp tutorial

二进制文件处理

二进制文件处理在 C++ 中主要用于存储和读取二进制数据,适用于处理非文本文件内容,如图像、音频、视频等格式。与文本文件不同,二进制文件中的数据存储为机器可读的格式,因此文件操作效率更高。

二进制文件的读写

与文本文件相比,二进制文件的读写需要特别注意格式和数据的存储方式。C++ 中的 fstream 提供了二进制文件的支持,通过 ios::binary 模式打开文件,能够进行高效的二进制数据操作。

示例:写入二进制数据

cpp
#include <iostream>
#include <fstream>

struct Data {
    int x;
    double y;
};

int main() {
    Data data = {42, 3.14};
    std::ofstream outfile("binary_data.dat", std::ios::binary);  // 以二进制模式打开文件
    if (!outfile) {
        std::cerr << "Error opening file!" << std::endl;
        return 1;
    }

    // 将数据写入文件
    outfile.write(reinterpret_cast<char*>(&data), sizeof(data));
    
    outfile.close();  // 关闭文件
    return 0;
}

`

在这个示例中,我们使用 ofstream 以 ios::binary 模式打开文件,并将结构体 Data 的内容写入文件。使用 reinterpret_cast 将结构体的数据转换为 char*,然后调用 write() 方法进行写入。

示例:读取二进制数据

cpp
#include <iostream>
#include <fstream>

struct Data {
    int x;
    double y;
};

int main() {
    Data data;
    std::ifstream infile("binary_data.dat", std::ios::binary);  // 以二进制模式打开文件
    if (!infile) {
        std::cerr << "Error opening file!" << std::endl;
        return 1;
    }

    // 从文件中读取数据
    infile.read(reinterpret_cast<char*>(&data), sizeof(data));
    
    std::cout << "x = " << data.x << ", y = " << data.y << std::endl;

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

在此示例中,我们使用 ifstream 以二进制模式读取文件中的数据。与写入操作类似,使用 reinterpret_cast 将读取的数据转换为目标类型。

关键概念

  • ios::binary 模式:用于打开文件以二进制方式读写。
  • write() 方法:将二进制数据写入文件。
  • read() 方法:从文件中读取二进制数据。
  • reinterpret_cast:用于将数据类型转换为字节流。

总结

通过二进制文件操作,C++ 可以高效地处理复杂数据结构。与文本文件相比,二进制文件能够节省空间,并且读取和写入速度更快,尤其在处理大量数据时具有优势。