Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
28 / 20 / 11
Регистрация: 10.02.2016
Сообщений: 237
1

Двоичный вывод в файл

13.03.2016, 17:09. Показов 1896. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Пишу программу для выводы объектов в файл в двоичном виде:

C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// Чтение из файла и запись нескольких объектов
#include <fstream> // для файловых потоков
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
class Distance{ // Класс английских расстояний
    private:
        int feet;
        float inches;
    public:
        Distance():feet(0),inches(0.0){} // конструктор (без аргументов)
        Distance(int ft, float in):feet(ft),inches(in){} // конструктор (2 арг.)
        void showdist(){ cout << feet << "\'-" << inches << '"'; } // вывод расстояния
        void getdist(){cout<<"Enter feet: ";cin>>feet;cout<<"Enter inches: ";cin>>inches;} // запросить длину у пользователя
};
///////////////////////////////////////////////////////////
int main(){
    char ch;
    Distance dist; // создать объект person
    fstream file; // создать входной/выходной файл
    // открыть для дозаписи
    file.open("GROUP.DAT", ios::app | ios::out |ios::in | ios::binary);
    do{ // данные от пользователя - в файл
        cout << "\nEnter data:"<<endl;
        dist.getdist(); // получить данные
        file.write(reinterpret_cast<char*>(&dist), sizeof(dist));// записать их в файл
        cout << "Continue (y/n)? ";
        cin >> ch;
    }while(ch == 'y'); // выход по 'n'
    file.seekg(0); // поставить указатель на начало файла
    file.read(reinterpret_cast<char*>(&dist), sizeof(dist));// считать данные
    while(!file.eof()){ // Выход по EOF
        cout << "\nDistance:";// вывести данные
        dist.showdist(); // считать данные о следующем
        file.read(reinterpret_cast<char*>(&dist), sizeof(dist));
    }
    cout << endl;
    return 0;
}
после запуска появляется в той же папке 2 файла: GROUP.DAT и gmon.out, но их содержание сильно отличается от двоичного кода, можете объяснить почему?

Добавлено через 47 минут
Плюс ещё хочу спросить зачем нужен reinterpret_cast?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2016, 17:09
Ответы с готовыми решениями:

Двоичный ввод/вывод в файл
Добрый лень. Программа записывает в файл массив целых чисел. После считывает каждый элемент и если он отрицательный, обратно в этот же файл...

Текстовый файл перевести в двоичный, а потом полученный двоичный файл перевести обратно в текстовый
Всем привет. Есть такая задачка: &quot;текстовый файл перевести в двоичный, а потом полученный двоичный файл перевести обратно в текстовый&quot;...

Задан текстовый файл, необходимо по нему сформировать двоичный файл индексов
Нужна помощь! Задача: Задан текстовый файл, необходимо по нему сформировать двоичный файл индексов (смещений начал строк в текстовом...

11
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
13.03.2016, 19:47 2
Цитата Сообщение от Joey Black Посмотреть сообщение
file.seekg(0); // поставить указатель на начало файла
После записи, перед переходом к чтению, нужно буфер сбросить (flush()), чтобы записанные данные попали в файл.
Цитата Сообщение от Joey Black Посмотреть сообщение
и gmon.out
Этот-то откуда берётся?
Цитата Сообщение от Joey Black Посмотреть сообщение
но их содержание сильно отличается от двоичного кода
В смысле?
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12860 / 6725 / 1807
Регистрация: 18.10.2014
Сообщений: 17,025
13.03.2016, 19:58 3
Цитата Сообщение от Joey Black Посмотреть сообщение
2 файла: GROUP.DAT и gmon.out, но их содержание сильно отличается от двоичного кода
Что такое "содержание сильно отличается от двоичного кода"? Как по-вашему должен выглядеть файл с "двоичным кодом" внутри и чем ваши файлы отличаются от этого?
1
28 / 20 / 11
Регистрация: 10.02.2016
Сообщений: 237
13.03.2016, 20:03  [ТС] 4
Цитата Сообщение от nd2 Посмотреть сообщение
Сообщение от Joey Black
и gmon.out
Этот-то откуда берётся?
Не знаю откуда, думал подскажете

Цитата Сообщение от nd2 Посмотреть сообщение
Сообщение от Joey Black
но их содержание сильно отличается от двоичного кода
В смысле?
Ну например заношу данные, записываем в файл 2 объекта, пусть будут 1 - 10, одинаковые. во что содержат файлы
GROUP.DAT:  A A
gmot.out: @ ґH zч y d юяяяґю" Ђ|A

Добавлено через 44 секунды
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что такое "содержание сильно отличается от двоичного кода"? Как по-вашему должен выглядеть файл с "двоичным кодом" внутри и чем ваши файлы отличаются от этого?
думаю должен выглядеть как набор нулей и единиц
0
Эксперт .NET
6517 / 4093 / 1606
Регистрация: 09.05.2015
Сообщений: 9,558
13.03.2016, 20:08 5
Цитата Сообщение от Joey Black Посмотреть сообщение
думаю должен выглядеть как набор нулей и единиц
Ну это смотря как вы этот файл смотрите. Для компьютера любой файл это набор нулей и единиц, а вот для человека можно этот набор представить различными способами... Судя по всему вы пытаетесь его посмотреть как текстовый файл, соответственно и видите текст...
1
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
12860 / 6725 / 1807
Регистрация: 18.10.2014
Сообщений: 17,025
13.03.2016, 20:14 6
Цитата Сообщение от Joey Black Посмотреть сообщение
думаю должен выглядеть как набор нулей и единиц
Файл не может никак "выглядеть". Файл - это некая запись на некоем носителе. В общем случае на эту запись невозможно "посмотреть".

А смотреть вы можете только на некое визуальное представление фала, сделанное некоей посторонней программой-просмотрщиком. Она покажет вам файл в том виде, в которым вы попросите. Попросите показывать, как набор нулей и единиц - будет показывать набор нулей и единиц. Попросите показывать, как набор шестнадцатеричных значений - будет показывать набор шестнадцатеричных значений. Попросите показывать, как текст - будет показывать как текст.

Вы как попросили?

Вы, очевидно, попросили некую программу-просмотрщик показать вам ваш файл, как текст. Разумеется, вы увидели там некие бессмысленные символы да кракозябры. Перестаньте заниматься ерундой, т.е. пытаться просматривать бинарный файл как текст. Возьмите программу-просмотрщик, которая умеет показывать содержимое файла в бинарном виде - и вы увидите ваши нули и единицы.
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
13.03.2016, 20:37 7
Цитата Сообщение от Joey Black Посмотреть сообщение
Не знаю откуда, думал подскажете
Это какой-то левый, не из этого кода.
Так твой файл выглядит в hex-редакторе. Первые четыре байта - int, вторые четыре байта - float, то же самое во второй строке (в файле никаких строк нет, это редактор так выводит). Так как код 0x41 - это код 'A', то, в текстовом редакторе, байт с этим значением будет виден как 'A'.
Миниатюры
Двоичный вывод в файл  
1
28 / 20 / 11
Регистрация: 10.02.2016
Сообщений: 237
13.03.2016, 21:55  [ТС] 8
Спасибо! понял.

Подскажите пожалуйста по поводу reinterpret_cast. Я взял запись из примера. Его нужно использовать просто, чтобы можно было использовать write() и read()?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
13.03.2016, 22:13 9
Цитата Сообщение от Joey Black Посмотреть сообщение
Его нужно использовать просто, чтобы можно было использовать write() и read()?
Да.

Добавлено через 1 минуту
http://www.cplusplus.com/refer... eam/write/
http://www.cplusplus.com/refer... ream/read/
1
28 / 20 / 11
Регистрация: 10.02.2016
Сообщений: 237
13.03.2016, 22:21  [ТС] 10
Спасибо, я там уже смотрел, я также прочитал, что reinterpret_cast нужно использовать в крайнем случае, почему?
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
13.03.2016, 23:07 11
Цитата Сообщение от Joey Black Посмотреть сообщение
я также прочитал, что reinterpret_cast нужно использовать в крайнем случае, почему?
А, насчёт почему, там, случайно, не написано?
0
28 / 20 / 11
Регистрация: 10.02.2016
Сообщений: 237
14.03.2016, 10:54  [ТС] 12
Цитата Сообщение от nd2 Посмотреть сообщение
А, насчёт почему, там, случайно, не написано?
Якобы он меняет тип данных в памяти имеет это смысл или нет, вообщем-то всё
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2016, 10:54
Помогаю со студенческими работами здесь

Создать текстовый файл и записать в двоичный файл
В программах необходимо использовать только динамические структуры. 1. Написать первую программу, которая считывает информацию из...

Заменить в программе, переводящую строку в двоичный код, консольный ввод/вывод на файловый ввод/вывод
Добрый день! Помогите, пожалуйста, с программой. Программа считывает строку с клавиатуры и переводит её в двоичный код. затем наоборот...

Двоичный ввод-вывод
Здравствуйте! Разбираюсь с вводом-выводом из файла и наткнулась на такую ситуацию. Ввожу объекты разных классов в разброс в файл с...

Двоичный файл
Помогите пожалуйста...задачка попалась...не могу понять как решить... В двоичном файле, содержащем данные типа unsigned int, возвести...

двоичный файл
помогите пожалуйста! вначале создаю двоичный файл и заполняю его целыми числами примерно так for (i = 0; i &lt;10; i++) { d =...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Безопасность кластеров Apache Kafka
Javaican 14.03.2025
Apache Kafka стал одним из ключевых компонентов современных архитектур, обрабатывающих потоки данных в режиме реального времени. Его используют тысячи компаний от стартапов до технологических. . .
Контейнеризация ML моделей с помощью Docker и Kubernetes
Mr. Docker 14.03.2025
Перенос ML-моделей из лаборатории в продакшн сопровождается целым комплексом проблем. Нередко код, который отлично работает на локальной машине, отказывается функционировать в промышленной среде. . . .
Организация масштабируемого хранилища с Apache Cassandra
Codd 14.03.2025
Изначально разработанная в Facebook, а затем переданная Apache Software Foundation, Cassandra сочетает в себе принципы Amazon's Dynamo и Google's BigTable. Эта комбинация создает уникальную. . .
Kafka или Pulsar: Что лучше для потоковой обработки в Java
Javaican 14.03.2025
Среди множества решений для потоковой обработки данных Apache Kafka долгое время удерживала лидирующие позиции, став де-факто стандартом в индустрии. Однако в последние годы всё больше внимания. . .
Создание и использование компонентов в Vue 3
Reangularity 14.03.2025
Компонент в Vue - это автономный блок интерфейса, который содержит собственную разметку, логику и стили. Представьте себе кнопку, форму ввода или даже целую панель навигации - всё это можно оформить. . .
Vue 3: Создаем современное веб-приложение с Composition API
Reangularity 14.03.2025
В фронтенд-разработке Vue 3 выделяется своим прагматичным подходом. В отличие от React с его минималистичной философией "всё — JavaScript" или Angular с его всеобъемлющим корпоративным подходом, Vue. . .
Разработка контекстных меню в iOS
mobDevWorks 14.03.2025
С приходом iOS 13 Apple представила новый API для контекстных меню, который полностью заменил предыдущую технологию 3D Touch peek & pop. Хотя многие разработчики и пользователи испытывают ностальгию. . .
Лучшие практики оптимизации Docker Image
Mr. Docker 13.03.2025
Размер Docker-образа влияет на множество аспектов работы с контейнерами. Чем больше образ, тем дольше его загрузка в реестр и выгрузка из него. Для команд разработки, работающих с CI/ CD пайплайнами,. . .
Вопросы на собеседовании по Docker
Mr. Docker 13.03.2025
Ты сидишь напротив технического специалиста, и вдруг звучит вопрос про Docker Swarm или многоэтапные сборки. Пот на лбу? Не переживай, после этой статьи ты будешь готов ко всему! Эта статья будет. . .
Поиск текста в сносках : замена дефиса на тире или тире на дефис...
РоΜа 13.03.2025
Нужно было найти текст в сносках и заменить. Почему-то метод селекшн не сработал. . . пришлось гуглить. найденный на форумвба код пришлось править. Смысл - заменяет в сносках дефисы и тире на нужные. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер