Lendo binário istream byte by byte

Eu estava tentando ler um arquivo binário byte a byte usando um ifstream. Eu usei métodos istream como get () antes para ler pedaços inteiros de um arquivo binário de uma só vez, sem problemas. Mas minha tarefa atual se presta a ir byte a byte e a contar com o buffer no sistema io para torná-lo eficiente. O problema é que eu parecia chegar ao final do arquivo vários bytes mais cedo do que deveria. Então, eu escrevi o seguinte programa de teste:

#include <iostream>
#include <fstream>

int main() {
    typedef unsigned char uint8;
    std::ifstream source("test.dat", std::ios_base::binary);
    while (source) {
        std::ios::pos_type before = source.tellg();
        uint8 x;
        source >> x;
        std::ios::pos_type after = source.tellg();
        std::cout << before << ' ' << static_cast<int>(x) << ' '
                  << after << std::endl;
    }
    return 0;
}

Isso despeja o conteúdo de test.dat, um byte por linha, mostrando a posição do arquivo antes e depoi

Com certeza, se meu arquivo tiver a sequência de dois bytes 0x0D-0x0A (que corresponde ao retorno de carro e ao avanço de linha), esses bytes serão ignorado

Abri o fluxo no modo binário. Isso não deveria impedir a interpretação dos separadores de linha?s operadores de extração sempre usam o modo de text Qual é a maneira correta de ler byte a byte de um istream binári

MSVC ++ 2008 no Window

questionAnswers(5)

yourAnswerToTheQuestion