21xrx.com
2024-05-20 08:45:26 Monday
登录
文章检索 我的文章 写文章
C++读取二进制文件到向量(vector)
2023-07-06 17:03:42 深夜i     --     --
C++ 二进制文件 读取 向量 vector

C++的STL库提供了一个非常方便的向量(vector)容器,它可以用来存储各种类型的数据,包括二进制数据。本文将介绍如何将二进制文件读取到向量中。

首先,我们需要定义一个向量来存储数据:


std::vector<unsigned char> data;

这个向量将存储二进制数据,每个元素为一个unsigned char类型,也可以用其他类型的向量。接下来,我们需要打开文件并读取数据。文件的打开和读取可以通过以下代码完成:


std::ifstream file("example.bin", std::ios::binary | std::ios::ate);

if(file.is_open())

{

  std::streampos size = file.tellg();

  file.seekg(0, std::ios::beg);

  data.resize(size);

  if(!file.read((char*)data.data(), size))

  

    //报错信息

  

  file.close();

}

else

  //报错信息

代码中,我们首先打开二进制文件,并检查打开是否成功。然后,我们通过使用std::ios::ate标志来获得文件大小,std::ios::beg来将文件指针移动到文件开头。接下来,我们使用resize函数将向量大小调整为文件大小,并使用read函数将文件数据读取到向量中。最后,我们关闭文件并检查读取是否成功。

对于大型二进制文件,内存可能会受到限制,因此我们可以使用较小的缓冲区部分地读取文件。下面是一个读取较小缓冲区的代码示例:


std::ifstream file("example.bin", std::ios::binary);

if(file.is_open())

{

  const std::streamsize buffer_size = 4096;

  char buffer[buffer_size];

  while(!file.eof())

  {

    file.read(buffer, buffer_size);

    std::streamsize count = file.gcount();

    if(count > 0)

    {

      data.insert(data.end(), buffer, buffer + count);

    }

  }

  file.close();

}

else

  //报错信息

在这个示例中,我们定义了一个缓冲区的大小,并在while循环中读取文件数据。如果成功读取了文件数据,我们将缓冲区的数据插入到向量的末尾。循环将在读取完整个文件后退出并关闭文件。

总之,我们可以使用STL的向量容器来轻松地读取二进制文件数据。这种方法不仅简单易懂,也很灵活,可以选择合适的读取方式以应对各种不同的情况。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复