Leer el binario istream byte por byte

Intenté leer un archivo binario byte a byte usando un ifstream. He usado métodos istream como get () antes para leer fragmentos enteros de un archivo binario a la vez sin ningún problema. Pero mi tarea actual se presta para ir byte a byte y confiar en el almacenamiento en búfer en el sistema io para hacerlo eficiente. El problema es que parecía llegar al final del archivo varios bytes antes de lo que debería. Entonces escribí el siguiente programa de prueba:

#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;
}

Esto descarga el contenido de test.dat, un byte por línea, mostrando la posición del archivo antes y después.

Suficientemente seguro, si mi archivo tiene la secuencia de dos bytes 0x0D-0x0A (que corresponde al retorno de carro y avance de línea), esos bytes se omiten.

He abierto la secuencia en modo binario. ¿No debería eso impedir que interprete los separadores de línea?Los operadores de extracción siempre usan el modo de texto? ¿Cuál es la manera correcta de leer byte por byte de un binario istream?

MSVC ++ 2008 en Windows.

Respuestas a la pregunta(5)

Su respuesta a la pregunta