В чем разница между оператором ifstream >> и методом get ()? - PullRequest
0 голосов
/ 18 марта 2020

Недавно я использовал оператор >> при чтении двоичных файлов, но в некоторых случаях он просто пропускал байт. Это вызвало у меня много проблем, чтобы найти, где ошибка в моем коде, но, наконец, мне удалось исправить это с помощью метода get(), но я до сих пор не знаю, почему >> время от времени пропускал байты .

Цель состоит в том, чтобы загрузить первый байт из файла в m_Value, то есть uint8_t.

Код с >>:

bool CByte :: load ( ifstream & fin)
{
    if(! ( fin >> m_Value ) ) return false;
    return true;
} 

Код с get():

bool CByte :: load ( ifstream & fin)
{
    char c = 0;
    if(! ( fin . get ( c ) ) ) return false;
    m_Value = static_cast <uint8_t> (c);
    return true;
}

1 Ответ

4 голосов
/ 18 марта 2020

operator>> - это форматированная функция ввода , а get() - неформатированная функция ввода .

Важное отличие заключается в том, что форматированный ввод пропускает пробел 1 перед извлечением, и он будет анализировать данные. Он предназначен для извлечения текста или чисел из потока, а не для чтения двоичных данных.


1 , если не указано иное, с помощью std::noskipws

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...