我有以下问题:
我需要二进制文件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);
}