将二进制文件读入std :: vector <uint16_t>而不是std :: vector <char>

时间:2016-04-15 10:25:46

标签: c++ c++11

我想读取包含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

1 个答案:

答案 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)