Чтение двоичного файла и интерпретация как целые числа - PullRequest
0 голосов
/ 13 января 2020

Я пытаюсь интерпретировать двоичный файл как последовательность целых чисел и считывать значения в вектор. Однако строка ifs >> n; всегда возвращает 0, а eof всегда ложно, позиция файла не обновляется. Если я изменяю тип на char, он работает, но это не то, чего я хочу достичь. Как я могу заставить код работать так, как я хочу?

int readAsNumber(const char* fileName, vector <int> &content)
{
    ifstream ifs;
    int n;

    ifs.open(fileName, ifstream::in | ifstream::binary);
    while (ifs.eof() == false)   // Never terminates 
    {
        ifs >> n;               // Always sets n = 0
        content.push_back(n);   // Saves 0
    }
    ifs.close();
    return 0;
}

1 Ответ

2 голосов
/ 13 января 2020

Оператор ввода >> читает и интерпретирует ввод как text .

Если файл содержит необработанные двоичные данные, вам необходимо прочитать как необработанные данные как хорошо:

int value;
while (ifs.read(reinterpret_cast<char*>(&value), sizeof value))
    content.push_back(value);

Помните, что хранение необработанных двоичных данных, таких как это, не переносимо и действительно не рекомендуется.

...