Мне интересно, почему я не могу использовать оператор >>
std::ifstream
, чтобы читать беззнаковый int из двоичного файла.Почему fstream.read работает, а не >>?
#include <fstream>
int main(int argc, char* argv[])
{
std::ifstream in(argv[1]);
if(in.fail())
return -1;
unsigned int atom_size = 0;
in.read(reinterpret_cast<char*>(&atom_size), 4);
in >> atom_size;
return 0;
}
Когда я использую in.read
я получаю значение, что я хотел, но когда я использую оператор >>
моя переменная atom_size не меняется. Зачем ?
Если OP читает двоичный файл, не должен быть поток открыт в двоичном режиме? – dyp
@ DyP, возможно, для переносимости и строгой корректности, да. На многих системах это просто не имеет значения. Разница между текстовыми и двоичными режимами обычно связана с обработкой окончаний строк и т. Д. В простой программе OP вряд ли будет разница. –
Возможно, было бы хорошо отметить, что Стандарт отличает *** Форматированные входные функции *** и что 'operator >> (unsigned int & val);' является одним из них, тогда как 'get',' ignore' и 'read' являются *** Неформатированные функции ввода ***. Естественно, * Форматированная входная функция * не работает без форматированного ввода. –