![]() |
|
Модераторы: bsa |
![]()
|
|
| lv151 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
как определить что в некой области памяти находится значение типа double, анализируя саму память?
|
|||
|
||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Никак. В памяти только данные. Во время компиляции уже было принято решение, что и как с ними делать.
Если возникает такой вопрос, значит вы что-то делаете не так. Расскажите о предпосылке возникновения этого вопроса. -------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| lv151 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
Есть указатель на память типа void.
В нём могут быть данные различных типов, однако там может быть мусор, или символ с кодом х00. Допустим:
Если в mas мусор, то при long* z = (long*)mas в z будет 0, но мне нужно определить невозможность приведения типа и вернуть условный NULL. |
||||
|
|||||
| djamshud |
|
|||
![]() Пердупержденный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 23.11.2009 Репутация: 4 Всего: 39 |
Делайте свой тип variant. Или используйте готовый.
-------------------- 'Cuz I never walk away from what I know is right Alice Cooper - Freedom |
|||
|
||||
| lv151 |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 916 Регистрация: 11.2.2008 Репутация: нет Всего: 2 |
хотя в
Это сообщение отредактировал(а) lv151 - 18.12.2009, 17:08 |
||||
|
|||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Любые данные при помещении в память превращаются в последовательность байтов -- шестнадцатеричных чисел от 00 до FF. Определить, что означают эти байты в общем случае нельзя. |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
double принципиально отличается от int количеством байт
если изначально забить 8байт чем-то, а потом записать туда значение, то можно будет определить число измененных байт - с float сложнее, однако есть несколько вариантов NaN, по ним можно отличить целое число от вещественного опять же, если известен диапазон значений переменной (напр . от 0 до 1.0) - задача упрощается по факту, зачастую вещественные числа можно опознать визуально в дампе) |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: нет Всего: 11 |
Одиночные тоже? По контексту, когда смотришь на массив double[] понятно, а как одиночное число распознать, если оно, например, вклинено между другими данными неизвестной природы в структуре? |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
Dims, также и распознать, смотришь на него внимательно и видишь. не видишь - смотришь дальше.
|
|||
|
||||
| azesmcar |
|
||||||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
Да? где это написано?
смотреть до полного просветление lv151 Не надо использовать void*, в C++ есть шаблоны. Все это решается на этапе компиляции, в runtime-е никак. Смотри boost::any, boost::variant Это сообщение отредактировал(а) azesmcar - 18.12.2009, 20:14 |
||||||
|
|||||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
azesmcar, опять ты про сферические компиляторы и платформы...
Добавлено через 1 минуту и 52 секунды azesmcar, "implementation defined" - это не означает "impossible to determine", это означает только то, что для разных платформ нужен разный код, и все. #define или шаблоны в руки - и вперед. |
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
нет, я про язык программирования C++, если не ошибаюсь именно ты являешься любителем сферических платформ, а именно вспоминается фраза про троичные компьютеры. Добавлено через 4 минуты и 3 секунды только вот как ты отличишь жирный нолик записанный во float от integer-а? |
|||
|
||||
| GoldFinch |
|
|||
![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2141 Регистрация: 30.11.2008 Репутация: 6 Всего: 26 |
azesmcar, а зачем его отличать? 0 он и есть 0
|
|||
|
||||
| azesmcar |
|
|||
![]() uploading... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6291 Регистрация: 12.11.2004 Где: Армения Репутация: 52 Всего: 211 |
||||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |