Как открыть файл в десятичном режиме с помощью ifstream - PullRequest
0 голосов
/ 30 марта 2020

Я хочу открыть файл в десятичном режиме.

Например:

ifstream file (ds->GetLocation(), ios::in|ios::binary); // how to open in decimal mode?

char ch;
if(file.is_open())
{
    while (!file.eof())
    {
        file.get(ch);
        double num = ch;
        cout << num << endl;
    }
    file.close();
}

Когда я открываю в двоичном режиме, вывод:

0
0
0
2
0
0
0
2
0
0
0
2
0
0
0
4
0
0
0
4
0
0
0
4
0
0
0
4
0
0
0
6
0
0
0
6
0
0
0
6
0
0
0
6
0
0
0
0

Но Я не хочу ноль. Я просто хочу:

2
2
2
2
4
4
4
4
6
6
6
6

Я могу получить эти значения в терминале с помощью:

$ od -D filename

Итак, я хочу получить этот результат, читая файл на C ++.

1 Ответ

0 голосов
/ 30 марта 2020

Вот рабочий пример с записью и чтением файла в двоичном режиме (данные: 0020):

#include <iostream>
#include <fstream>

int main()
{
    const auto filename = "test.bin";

    // write file in binary mode; data: `0020`

    std::ofstream out_file { filename, std::ios::binary };
    if ( !out_file.is_open() ) return -1;

    out_file.put( 0 );
    out_file.put( 0 );
    out_file.put( 2 ); // non-zero value
    out_file.put( 0 );
    out_file.close();

    // read file in binary mode; print only non-zero value

    std::ifstream in_file { filename, std::ios::binary };
    if ( !in_file.is_open() ) return -1;

    char c {'\0'};
    while ( in_file >> c )
    {
        const int n = c;
        if ( n ) std::cout << n << '\n';
    }

    in_file.close();

    return 0;
}

Вывод:

2

Соответствующий поток для чтения:

...