我读an answer here展示了如何用下面的(二)班轮读取整个流成的std :: string:如何将整个流读入std :: vector?
std::istreambuf_iterator<char> eos;
std::string s(std::istreambuf_iterator<char>(stream), eos);
对于做类似的读取二进制流的东西变成std::vector
,为什么不能”我简单地用uint8_t
和std::string
替换char
与std::vector
?
auto stream = std::ifstream(path, std::ios::in | std::ios::binary);
auto eos = std::istreambuf_iterator<uint8_t>();
auto buffer = std::vector<uint8_t>(std::istreambuf_iterator<uint8_t>(stream), eos);
上面产生一个编译器错误(VC2013):
1> d:\非SVN \ C++ \库\ I \文件\ filereader.cpp(62):错误C2440: '':不能从 转换 '的std :: basic_ifstream>' 到 '的std :: istreambuf_iterator>' 1>
其中1> [1> _Elem = uint8_t 1> 1>
没有构造可以采取源类型或构造函数过载 分辨率不明确
'char'和'uint8_t'不是你的编译器同样的事情。尝试使用'char'来代替。 – cdhowie 2014-10-27 14:08:16
@cdhowie'uint8_t'是'unsigned char',所以是的,在任何一台计算机上都不一样;)但是,这可能是一个模糊的转换,因为'ifstream'的输出是'char''。 – aruisdante 2014-10-27 14:09:54
是的,它适用于char,但uint8_t无论如何都是unsigned char。 – Robinson 2014-10-27 14:10:00