我可以在什么类型的结构中保存ifstream的二进制数据?

时间:2016-01-18 11:12:47

标签: c++ stream fstream binaryfiles readfile

我有以下问题:

我需要二进制文件X的内容,我可以用std::ifstream阅读,但问题是我需要一个循环,让我们说看起来像:

// pseudo code
while(true)
{
  var i = read 8 chars from ifstream(X)

  if (i == 0xaeae)
    read 10 bytes from ifstream(X)
  if (i == 0xaeff)
    read 20 bytes from ifstream(X)

  // other stuff
}

所以问题是我想将文件X的二进制内容读取(最好)一个(什么类型的?)流,以便我从while循环中读取光盘读取。

这里适用什么类型的结构以及如何操作?

我知道怎么读到例如vector<char>

std::ifstream ifs("X", std::ios::binary);
std::vector<char> fileContents((std::istreambuf_iterator<char>(ifs)),
                               std::istreambuf_iterator<char>());

但这不会给我read(n bytes) API

编辑

我的'工作'解决方案std::stringstream

std::filebuf fb;
std::stringstream data;
if (fb.open(filename.c_str(), std::ios::in))
{
  std::istream is(&fb);
  data<< std::hex << std::setfill('0');
  while (is)
    data << std::setw(2) << static_cast< int >(is.get());
  fb.close();
}

EDIT2

我对其他无效的解决方案感到困惑,因此升级后的版本为std::stringstream

std::ifstream is(filename.c_str());
std::stringstream data;
if (!is)
{
  // error
}
else
{
  data << std::hex << std::setfill('0');
  while (is)
    data << std::setw(2) << static_cast< int >(is.get());
  is.seekg(0);
}

0 个答案:

没有答案