Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 80, средняя оценка - 4.64
Kol-yan
Сообщений: n/a
#1

Запись в бинарный файл - C++

19.03.2009, 22:36. Просмотров 9681. Ответов 3
Метки нет (Все метки)

Здравствуйте.
Прошу помочь разобраться с проблемой.
Необходимо записать в двоичный файл 8-байтовое число, но не как строку, а по-байтово само число.
То бишь имеется какой-то бинарник xxx.bin, в него надо записать число, например, 12345678. Не как 31 32 33 34 35 36 37 38, а как 00 00 00 00 00 BC 61 4E.
Как это осуществляется на Си или C++?

Заранее спасибо за ответ)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2009, 22:36     Запись в бинарный файл
Посмотрите здесь:

C++ Запись в бинарный файл
C++ Запись в бинарный файл вектора
C++ запись в бинарный файл
Запись в бинарный файл C++
C++ Запись в бинарный файл
Запись в бинарный файл C++
C++ Запись string в бинарный файл
C++ Запись текста в бинарный файл
C++ Запись в бинарный файл
C++ Запись структуры в бинарный файл
Запись вектора в бинарный файл C++
Запись в бинарный файл C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Alexiski
Любитель давать советы
338 / 130 / 2
Регистрация: 12.01.2009
Сообщений: 511
19.03.2009, 22:49     Запись в бинарный файл #2
Смотрите, например, функции fopen, fwrite.

Только наиболее распространенные системы little-endian, то есть обычно в файл пишется в обратном порядке: 4E 61 BC 00 00 00 00 00
Kol-yan
Сообщений: n/a
23.03.2009, 19:04     Запись в бинарный файл #3
Да, но fwrite имеет формат:
fwrite(buffer, size, count, stream)
где char *buffer является указателем на записываемые данные.
В моем же случае записывается число, а не строка.
Единственное, что пришло в голову, это попробовать использовать методы привидения типов, в стиле reinterpret_cast. То есть в формате:
fwrite(reinterpret_cast<char*>(buffer), size, count, stream)
Хоть это и дает ожидаемый результат, но я не уверен в корректности этого метода. Может есть другие способы?

Кстати, данные действительно пишутся в обратном порядке "4E 61 BC ...") Как можно поменять порядок их записи?
Alexiski
Любитель давать советы
338 / 130 / 2
Регистрация: 12.01.2009
Сообщений: 511
23.03.2009, 21:56     Запись в бинарный файл #4
Там все-таки стоит void * buffer, а это означает, что любой указатель можно привести к этому типу без явного преобразования:
C++
1
2
long int N = 12345;
fwrite (&N, sizeof(N), 1, f);
Данные пишутся при этом в файл в том же порядке, в котором хранятся в памяти. Если нам нужно их просто записать, а потом прочитать, то об этом можно не думать - запишутся именно так, как нужно для последующего чтения. Если порядок таки важен, то надо либо переворачивать число в памяти, либо записывать по одному байту, начиная с конца, но тут уже от приведения к байтам не уйти.
Yandex
Объявления
23.03.2009, 21:56     Запись в бинарный файл
Ответ Создать тему
Опции темы

Текущее время: 04:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru