Я прочитал an answer here, показывающий, как читать весь поток в станд :: строку со следующим один (два) лайнера:Как читать весь поток в std :: vector?
std::istreambuf_iterator<char> eos;
std::string s(std::istreambuf_iterator<char>(stream), eos);
Для делать что-то подобное, чтобы прочитать двоичный поток в std::vector
, то почему» t Я просто заменяю char
на uint8_t
и std::string
с 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++ \ библиотеки \ я \ файл \ filereader.cpp (62): Ошибка C2440: '': не удается преобразовать из 'станд :: basic_ifstream>' в 'станд :: istreambuf_iterator>' 1>
с 1> [1> _Elem = uint8_t 1>] 1>
нет конструктор не мог взять источник тип или перегрузка конструктора разрешение было неоднозначным
Основываясь на сообщении об ошибке '' char' и uint8_t' не то же самое, на ваш компилятор. Вместо этого попробуйте использовать 'char'. – cdhowie
@cdhowie 'uint8_t' is' unsigned char', так что да, не то же самое на любом компьютере;) Но да, это, вероятно, неоднозначный актерский состав, поскольку вывод для 'ifstream' -' 'char''. – aruisdante
Да, он работает с символом char, но uint8_t является символом без знака. – Robinson