Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2012, 21:24   #1
Flame20
Пользователь
 
Регистрация: 21.03.2012
Сообщений: 14
Восклицание записать int* в бинарный файл

Всем привет! подскажите, пожалуйста, можно ли как-то записать массив int* в бинарный файл используя функцию ofstream write??? эта функция принимает на вход массив char*, но при переводе int в char происходит потеря данных для таких элементов как например -129 и т.д. Может есть другой способ записи?
перерыла весь интернет, ничего подходящего не нашла, но как-то не верится что нельзя это реализовать...
Заранее спасибо!
Flame20 вне форума Ответить с цитированием
Старый 29.04.2012, 21:29   #2
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Flame20

можно ли как-то записать массив int* в бинарный файл используя функцию ofstream write

разумеетсмя, можно.

std:: ofstream ofs("out.bin", std::ios:: out | std::ios::binary);

int* arr = new int[10];
ofs.write((const char*) arr, 10 * sizeof(int));
Rififi вне форума Ответить с цитированием
Старый 29.04.2012, 21:53   #3
Flame20
Пользователь
 
Регистрация: 21.03.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
Flame20

можно ли как-то записать массив int* в бинарный файл используя функцию ofstream write

разумеетсмя, можно.

std:: ofstream ofs("out.bin", std::ios:: out | std::ios::binary);

int* arr = new int[10];
ofs.write((const char*) arr, 10 * sizeof(int));
спасибо, но разве при данном способе например вместо числа -129 не запишется 127???
Flame20 вне форума Ответить с цитированием
Старый 29.04.2012, 21:57   #4
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Flame20

спасибо, но разве при данном способе например вместо числа -129 не запишется 127???

при данном способе запишется бинарное представление числа в памяти. как ты дальше будеть интерпретировать это значение - компилятор около птицы.
Rififi вне форума Ответить с цитированием
Старый 29.04.2012, 22:06   #5
Flame20
Пользователь
 
Регистрация: 21.03.2012
Сообщений: 14
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение

при данном способе запишется бинарное представление числа в памяти. как ты дальше будеть интерпретировать это значение - компилятор около птицы.
ясно. а тогда такой вопрос: если вот мы записали -129 таким способом, то как его можно считать обратно? если аналогично этому способу, число считается правильно?
Код:
std:: ofstream ofs("out.bin", std::ios::in| std::ios::binary);

char* arr = new char[10];
ofs.read( arr, 10 * sizeof(char));

Последний раз редактировалось Flame20; 29.04.2012 в 22:21.
Flame20 вне форума Ответить с цитированием
Старый 29.04.2012, 22:10   #6
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Flame20

если прочитаете в массив того же типа, то значения будут, как это ни парадоксально, в точности равны оригинальным.
Rififi вне форума Ответить с цитированием
Старый 29.04.2012, 22:20   #7
Flame20
Пользователь
 
Регистрация: 21.03.2012
Сообщений: 14
По умолчанию

Цитата:
если прочитаете в массив того же типа, то значения будут, как это ни парадоксально, в точности равны оригинальным.
в смысле прочитать в массив int*? но ведь функция ofs.read() требует массив именно типа char*. или я что-то не так понимаю?
Flame20 вне форума Ответить с цитированием
Старый 29.04.2012, 22:23   #8
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Flame20

но ведь функция ofs.read() требует массив именно типа char*

ну и что? функция write тоже требует тип char*, но это не помешало мне записать массив интов.
На C/C++ у тебя полностью развязаны руки. Представь себя Дарт Вейдером - повелителем темной силы :D oO
Rififi вне форума Ответить с цитированием
Старый 29.04.2012, 22:33   #9
Flame20
Пользователь
 
Регистрация: 21.03.2012
Сообщений: 14
Хорошо

Цитата:
Сообщение от Rififi Посмотреть сообщение
Flame20

но ведь функция ofs.read() требует массив именно типа char*

ну и что? функция write тоже требует тип char*, но это не помешало мне записать массив интов.
На C/C++ у тебя полностью развязаны руки. Представь себя Дарт Вейдером - повелителем темной силы :D oO
Ура! Всё получилось!!) спасибо огромнейшее!!))
Flame20 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Двухзначное число int записать как пару однозначных int (c++) narien Помощь студентам 2 08.01.2012 15:10
Бинарный файл Хитман Помощь студентам 1 27.03.2011 19:04
Бинарный файл nXs Общие вопросы Delphi 4 26.03.2011 11:40
Бинарный файл mchip Microsoft Office Excel 10 05.03.2009 19:10
Бинарный файл Bayazet Общие вопросы Delphi 1 04.03.2009 16:39