C++ Читать char из бинарного файла

Рейтинг: 0Ответов: 1Опубликовано: 21.02.2023

Дана задача "Прочитать количество мужчин(первое число int) и список всех мужчин".

Кол-во я прочитал, а с именами возникла проблема.

Как правильно читать char из бинарного файла?

В файле сначала записано число типа int, далее несколько повторяющихся данных: имя, фамилия и возраст в формате: Иван Иванов 25

Содержимое входного файла:

00000101 00000000 00000000 00000000 11001000 11100010 11100000 11101101 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11001000 11100010 11100000 11101101 11101110 11100010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00011001 00000000 00000000 00000000 11001101 11101000 11101010 11101110 11101011 11100000 11101001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11010001 11101000 11100100 11101110 11110000 11101110 11100010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00011011 00000000 00000000 00000000 11010001 11100101 11110000 11100011 11100101 11101001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11001000 11100010 11100000 11101101 11101110 11100010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00101111 00000000 00000000 00000000 11011110 11110000 11101000 11101001 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11000000 11101011 11100101 11101010 11110001 11100101 11100101 11101101 11101010 11101110 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00010010 00000000 00000000 00000000 11001000 11100010 11100000 11101101 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 11000100 11101110 11101011 11100011 11101110 11101111 11101110 11101011 11101110 11100010 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00100000 00000000 00000000 00000000

Программа:

int main()
{
    setlocale(LC_ALL, "Russian");
    FILE *input = fopen("mans.bin", "rb");
    FILE *output = fopen("file2.txt", "w");

    if (input == NULL)
    {
        cout << "Файл не найден" <<endl;
    }
    else
    {

        int a;
        char c[4];
        fread(&a, sizeof(int), 1 ,input);
        fread(&c, sizeof(c), 1 ,input);
        // cout << sizeof(int);
        cout << a << endl << c << endl;
    }

    fclose(input);
    fclose(output);
}

Ответы

▲ 0
#include <iostream>
#include <fstream>
#include <locale>

using namespace std;

struct Data {
    char fname[20];
    char lname[20];
    int  age;
    };

int main(int argc, char* argv[]) {
    setlocale(LC_ALL, ".1251");
    ifstream in("t.bin", ios::binary);
    int count;
    in.read((char*)&count, 4);

    for (int i = 0; i < count; ++i) {
        Data d;
        in.read((char*)&d, sizeof(d));
        cout << d.fname << " " << d.lname << ", age: " << d.age << endl;
        }
    }