我想读取包含uint16_t值的二进制文件。到目前为止我所做的是:
std::ifstream is;
std::vector<char> rawfilebuffer; /* should be std::vector<uint16_t> */
is.open("uint16_t_file.raw", std::ios::binary);
is.seekg(0, std::ios::end);
size_t filesize=is.tellg();
is.seekg(0, std::ios::beg);
rawfilebuffer.reserve(filesize);
rawfilebuffer.assign(std::istreambuf_iterator<char>(is),
std::istreambuf_iterator<char>());
使用std::istreambuf_iterator<char>
不起作用(error: no matching conversion for functional-style cast from 'std::ifstream'
)。
是否可以将istreambuf_iterator强制转换为uint16_t
?
答案 0 :(得分:5)
使用c ++ 11,您可以使用data()
的{{1}}成员并读取所有文件(如果文件太大,则读取大块文件)。
像
这样的东西std::vector
注意文件大小。如果它是#include <vector>
#include <fstream>
#include <iostream>
using myType = uint16_t;
int main ()
{
std::ifstream is;
std::vector<myType> rawfilebuffer;
is.open("uint16_t_file.raw", std::ios::binary);
is.seekg(0, std::ios::end);
size_t filesize=is.tellg();
is.seekg(0, std::ios::beg);
rawfilebuffer.resize(filesize/sizeof(myType));
is.read((char *)rawfilebuffer.data(), filesize);
for ( auto const & ui : rawfilebuffer )
std::cout << '[' << ui << ']';
std::cout << '\n';
return 0;
}
的精确倍数,那么。
否则,您应该以这种方式修改调整大小指令
sizeof(myType)