Чтение двоичного потока побайтно

Я пытался прочитать бинарный файл побайтно с помощью ifstream. Раньше я использовал методы istream, такие как get (), для одновременного чтения целых кусков двоичного файла без проблем. Но моя текущая задача заключается в побайтовом переходе и использовании буферизации в io-системе, чтобы сделать ее эффективной. Проблема в том, что мне показалось, что я дошел до конца файла на несколько байтов раньше, чем следовало. Итак, я написал следующую тестовую программу:

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

Это выводит содержимое test.dat, по одному байту на строку, показывая положение файла до и после.

Конечно же, если мой файл имеет двухбайтовую последовательность 0x0D-0x0A (что соответствует каретке return и line feed), эти байты пропускаются.

  • Я открыл поток в двоичном режиме. Разве это не мешает ему интерпретировать разделители строк?
  • Всегда ли операторы извлечения используют текстовый режим?
  • Как правильно читать байт за байтом из двоичного потока istream?

MSVC ++ 2008 в Windows.

23
задан Adrian McCarthy 1 April 2011 в 12:44
поделиться