Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как определить что в некой области памяти находитс 
V
    Опции темы
lv151
Дата 18.12.2009, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



как определить что в некой области памяти находится значение типа double, анализируя саму память?
PM MAIL   Вверх
djamshud
Дата 18.12.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Никак. В памяти только данные. Во время компиляции уже было принято решение, что и как с ними делать.

Если возникает такой вопрос, значит вы что-то делаете не так. Расскажите о предпосылке возникновения этого вопроса.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
lv151
Дата 18.12.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Есть указатель на память типа void. 

Код

void* mas; 


В нём могут быть данные различных типов, однако там может быть мусор, или символ с кодом х00.

Допустим:
Код

long* z = (long*)mas;
 *z = 555;



Если в mas мусор, то при long* z = (long*)mas в z будет 0, но мне нужно определить невозможность приведения типа и вернуть условный NULL.

PM MAIL   Вверх
djamshud
Дата 18.12.2009, 16:25 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

Репутация: 4
Всего: 39



Делайте свой тип variant. Или используйте готовый.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
lv151
Дата 18.12.2009, 17:08 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 916
Регистрация: 11.2.2008

Репутация: нет
Всего: 2



Код

dblVal = -6.2774385622042e+066

хотя в 
Код

double* f = (double*)mas;
 f = 5.5?

Это сообщение отредактировал(а) lv151 - 18.12.2009, 17:08
PM MAIL   Вверх
Dims
Дата 18.12.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Цитата(lv151 @  18.12.2009,  16:02 Найти цитируемый пост)
как определить что в некой области памяти находится значение типа double, анализируя саму память? 

Любые данные при помещении в память превращаются в последовательность байтов -- шестнадцатеричных чисел от 00 до FF. Определить, что означают эти байты в общем случае нельзя. 

PM MAIL   Вверх
GoldFinch
Дата 18.12.2009, 18:57 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



double принципиально отличается от int количеством байт
если изначально забить 8байт чем-то, а потом записать туда значение, то можно будет определить число измененных байт - 
с float сложнее, однако есть несколько вариантов NaN, по ним можно отличить целое число от вещественного
опять же, если известен диапазон значений переменной (напр . от 0 до 1.0) - задача упрощается

по факту, зачастую вещественные числа можно опознать визуально в дампе)
PM MAIL ICQ   Вверх
Dims
Дата 18.12.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: нет
Всего: 11



Цитата(GoldFinch @  18.12.2009,  18:57 Найти цитируемый пост)
по факту, зачастую вещественные числа можно опознать визуально в дампе) 

Одиночные тоже? По контексту, когда смотришь на массив double[] понятно, а как одиночное число распознать, если оно, например, вклинено между другими данными неизвестной природы в структуре?
PM MAIL   Вверх
GoldFinch
Дата 18.12.2009, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Dims, также и распознать, смотришь на него внимательно и видишь. не видишь - смотришь дальше.
PM MAIL ICQ   Вверх
azesmcar
Дата 18.12.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(GoldFinch @  18.12.2009,  18:57 Найти цитируемый пост)
double принципиально отличается от int количеством байт

Да? где это написано?
Цитата

The type double provides at least as much precision as float, and the type long double provides at least as much precision as
double.


Цитата(GoldFinch @  18.12.2009,  18:57 Найти цитируемый пост)
если изначально забить 8байт чем-то, а потом записать туда значение, то можно будет определить число измененных байт - 
с float сложнее, однако есть несколько вариантов NaN, по ним можно отличить целое число от вещественного
опять же, если известен диапазон значений переменной (напр . от 0 до 1.0) - задача упрощается

Цитата

The value representation of floatingpoint types is implementation defined.


Цитата(GoldFinch @  18.12.2009,  19:23 Найти цитируемый пост)
Dims, также и распознать, смотришь на него внимательно и видишь. не видишь - смотришь дальше. 

смотреть до полного просветление smile

lv151

Не надо использовать void*, в C++ есть шаблоны. Все это решается на этапе компиляции, в runtime-е никак.
Смотри boost::any, boost::variant

Это сообщение отредактировал(а) azesmcar - 18.12.2009, 20:14
PM   Вверх
GoldFinch
Дата 18.12.2009, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



azesmcar, опять ты про сферические компиляторы и платформы...

Добавлено через 1 минуту и 52 секунды
azesmcar, "implementation defined" - это не означает "impossible to determine", это означает только то, что для разных платформ нужен разный код, и все. 
#define или шаблоны в руки - и вперед.
PM MAIL ICQ   Вверх
azesmcar
Дата 18.12.2009, 20:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(GoldFinch @  18.12.2009,  20:24 Найти цитируемый пост)
azesmcar, опять ты про сферические компиляторы и платформы... 

нет, я про язык программирования C++, если не ошибаюсь именно ты являешься любителем сферических платформ, а именно вспоминается фраза про троичные компьютеры.

Добавлено через 4 минуты и 3 секунды
Цитата(GoldFinch @  18.12.2009,  20:24 Найти цитируемый пост)
azesmcar, "implementation defined" - это не означает "impossible to determine", это означает только то, что для разных платформ нужен разный код, и все. 
#define или шаблоны в руки - и вперед. 

только вот как ты отличишь жирный нолик записанный во float от integer-а?
PM   Вверх
GoldFinch
Дата 18.12.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



azesmcar, а зачем его отличать? 0 он и есть 0
PM MAIL ICQ   Вверх
azesmcar
Дата 18.12.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(GoldFinch @  18.12.2009,  21:29 Найти цитируемый пост)
azesmcar, а зачем его отличать? 0 он и есть 0 


Цитата(lv151 @  18.12.2009,  16:02 Найти цитируемый пост)
как определить что в некой области памяти находится значение типа double


PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0767 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.