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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.09.2012, 17:48   #1
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию File -> double [вопрос]

Доброе время суток.
Столкнулся с проблемой. Помогите пожалуйста.
Проблема заключается в следующем:
записываю double в файл таким видом:
Код:
db = (double)confbuf[i];
memcpy(confbuf2+b2step, &db, 8);
8 байт записываются. Но как их прочитать обратно в double? Весь файл в памяти. Код идет: адрес + step; .
Код:
memcpy(confbuf+i, (void*)db, 8);
не канает... ошибка:
error C2440: 'type cast' : cannot convert from 'double' to 'void *'
Пытался побайтово читать и умножать на 0x100. Но это интовый результат, а могут быть числа и после запятой.

Прошу помощи в решении. Заранее благодарен.
Tahoma вне форума Ответить с цитированием
Старый 30.09.2012, 18:25   #2
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Как-то так это делается:
Код:
double d1 = 3.1415936;
double d2;
char* buf = new char[sizeof(double)];
strcpy(buf, std::reinterpret_cast<char*>(&d1));
d2 = *(std::reinterpret_cast<double*>(buf));
std::cout << d2;
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 30.09.2012, 18:56   #3
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Цитата:
Сообщение от Гром Посмотреть сообщение
Как-то так это делается:
Код:
double d1 = 3.1415936;
double d2;
char* buf = new char[sizeof(double)];
strcpy(buf, std::reinterpret_cast<char*>(&d1));
d2 = *(std::reinterpret_cast<double*>(buf));
std::cout << d2;
Спасибо... в дабл прочиталось. не точно, но все же. дальше уж сам разберусь. сдвиг видимо корявый у меня.
Tahoma вне форума Ответить с цитированием
Старый 01.10.2012, 10:28   #4
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Чтото у вас второй memcpy() какойто странный... Во первых наверно надо всетаки поменять местами буфера а во втрых в первом у вас &db а во втором просто db
waleri вне форума Ответить с цитированием
Старый 01.10.2012, 10:31   #5
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Tahoma

просто открываешь файловый поток в бинарном режиме, а дальше используешь операторы << и >>
Rififi вне форума Ответить с цитированием
Старый 02.10.2012, 19:13   #6
Tahoma
DI HALT RET
Форумчанин
 
Аватар для Tahoma
 
Регистрация: 30.12.2010
Сообщений: 117
По умолчанию

Вот что у меня получилось:
Код:
char* confbuf; // буфер
int i ; // смещение

memcpy(confbuf+i, &db, 8); // запись DOUBLE в буфер
memcpy(reinterpret_cast<char*>(&db), confbuf+i, 8); // чтение из буфера
waleri, да... местами перепутал. бывает

Rififi, хм... у меня компилятор ругается на смещения с форматом DOUBLE, а если смещения применять к бинарному буферу, то изымать снова надо будет, либо использовать __int64.

Спасибо вам!
Tahoma вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В чём разница между unit, header file, cpp file? TwiX Общие вопросы C/C++ 6 29.04.2012 19:49
Вопрос по преобразованию типов переменных (TImage и FILE) Pcrepair Общие вопросы Delphi 3 04.01.2011 15:15
функция pow(double x, double y) Не могу понять в чем ошибка Vlashel Помощь студентам 3 07.10.2010 16:28
Вопрос по setiosflags() и double fs444 Общие вопросы C/C++ 1 25.12.2009 11:37
long double vs. double VoidMan Общие вопросы C/C++ 1 21.09.2009 18:45