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

Преобразование указателя из char в int и double - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 179
05.05.2013, 15:32     Преобразование указателя из char в int и double #1
указатель sadr является типом char мне нужно перопределить его на типы на int и double
C++
1
2
3
4
5
6
7
int a;
double b;
void cr(char **sadr)
{
*(*wtadr) = a;//если буду так делать запишет только один байт
*(*wtadr) = b;//здесь тоже только один байт
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.05.2013, 15:37     Преобразование указателя из char в int и double #2
C++
1
2
*((int*)(*wtadr)) = a;
*((double*)(*wtadr)) = b;
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.05.2013, 21:25     Преобразование указателя из char в int и double #3
Я бы вместо char* использовал void* и static_cast. А если уж char*, то reinterpret_cast. Все таки плюсы, а не голый си.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.05.2013, 22:35     Преобразование указателя из char в int и double #4
Цитата Сообщение от Tulosba Посмотреть сообщение
static_cast. А если уж char*, то reinterpret_cast. Все таки плюсы, а не голый си.
чем оба эти каста лучше чем си-каст в данном конкретном случае?
под данным конкретным случаем подразумевается чистая работа с байтами.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.05.2013, 23:01     Преобразование указателя из char в int и double #5
Jupiter, лучше тем, что они более ясно говорят программисту о том, что происходит. Использование приведений в стиле си - имхо, моветон.
P.S. Я всё же хочу акцентировать внимание на том, что это С++, а не С.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
05.05.2013, 23:11     Преобразование указателя из char в int и double #6
Цитата Сообщение от Tulosba Посмотреть сообщение
Использование приведений в стиле си - имхо, моветон.
Согласен, но не в данном случае. Использовать си-каст для снятия константности или для повышения/понижения по иерархии, да моветон, ещё и опасный. Для указателей на примитивы профита от reinterpret_cast не вижу. ИМХО.
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
05.05.2013, 23:25     Преобразование указателя из char в int и double #7
Jupiter, смотря что считать профитом. reinterpret_cast например проще найти в коде. А учитывая, что преобразования такого рода платформозависимы, это позволит быстрее локализовать место потенциальной ошибки при портировании. Снова имхо
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2013, 20:04     Преобразование указателя из char в int и double
Еще ссылки по теме:

C++ Преобразование long double в char
C++ - конверсия указателя из double в int, пропускает передаваемые переменные в функцию C++
Перевод int и double в char* C++

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

Или воспользуйтесь поиском по форуму:
korez
8 / 8 / 0
Регистрация: 22.02.2011
Сообщений: 179
06.05.2013, 20:04  [ТС]     Преобразование указателя из char в int и double #8
а вот так вызывает ошибку Jupiter, "программа вызвала ошибку"
C++
1
*((double*)(*wtadr + (ind * eq_el) + 12) = b;
а вот так работает
C++
1
*reinterpret_cast<double*>(*wtadr + (ind * eq_el) + 12)
где wtadr - базовый адресс, ind - индекс, eq_el - константа

Добавлено через 16 часов 21 минуту
есть способ сделать конверсию без *reinterpret_cast?
Yandex
Объявления
06.05.2013, 20:04     Преобразование указателя из char в int и double
Ответ Создать тему
Опции темы

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