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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
cetrael
60 / 5 / 3
Регистрация: 01.10.2011
Сообщений: 93
#1

Reinterpret_cast - C++

22.04.2012, 15:55. Просмотров 686. Ответов 2
Метки нет (Все метки)

Не могу понять к чему тут этот каст и каким образом он влияет на результат.


C++
1
char zxc = ((*(reinterpret_cast<const char*>(&(todo == 0 ? length : (todo == 3 ? md: sec))) + cur_length_byte) & (1 << pos)) >> pos);
result = 0

C++
1
char qwe = (((todo == 0 ? length : (todo  == 3 ? md: sec)) + cur_length_byte) & (1 << pos)) >> pos;
result = 1
При todo = 0, pos = 1, length = 9, cur_length_byte = 1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2012, 15:55
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Reinterpret_cast (C++):

reinterpret_cast - C++
Подскажите плиз, чем отличается функция reinterpret_cast от static_cast? небольшой пример: const int MAX = 100; // размер буфера ...

reinterpret_cast<...>(...) - C++
Всем привет! Сразу к делу. ВОПРОС: Как преобразовать переменную типа float в указатель типа double; КРАТКОЕ ОПИСАНИЕ...

Преобразование (reinterpret_cast) - C++
ifstream infile(&quot;person.dat&quot;, ios::binary); infile.read(reinterpret_cast&lt;char*&gt;(&amp;pers),sizeof(pers)); pers - объект класса. ...

Оператор reinterpret_cast - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; int main() { int x3 = -0x00260305; cout &lt;&lt;hex &lt;&lt;...

По функции reinterpret_cast - C++
Доброго времени суток, коллеги! Навоял вот такой код: #include&lt;iostream&gt; using namespace std; int main() { ...

Reinterpret_cast и указатели - C++
Добрый вечер. Есть вот такая конструкция: *reinterpret_cast&lt;Offsets::UnitGender*&gt;(pPlayerFields + Offsets::Unit::Gender) =...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
DU
1483 / 1059 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
22.04.2012, 16:24 #2
мда. писать все в одной строке - то еще зло. понять друго что происходит.
по вашей проблеме:
после выкидывания невлияющего на результат кода и принимая во внимание что length == 0
все это дело можно упростить до:
C++
1
2
3
4
5
6
7
8
const char res1 = *(reinterpret_cast<const char*>(&length) + cur_length_byte);
const char res2 = length + cur_length_byte;
 
В перовой строчке берется адрес переменной length, к этому адресу прибавляется
cur_length_byte байт (ну т.е. один байт т.к. cur_length_byte==1 ). после вот такого
складывания получается укзатель, который указывает за переменную length. потом
этот указатель разыменовывается. это конечно же не то же самое, что складывание
двух переменных. Вот поэтому результаты отличаются.
Toshkarik
1140 / 857 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
22.04.2012, 16:25 #3
Приведение типов
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2012, 16:25
Привет! Вот еще темы с ответами:

Reinterpret_cast <MyType> (void*) - C++
Нужно преобразовать тип (void*) к некоторому пользовательскому типу. Преобразование reinterpet_cast &lt;MyType*&gt; (void *) работает, а...

Reinterpret_cast массива структур - C++
Добрый день. Есть такая строка: const TypeFoParametr&amp; a = *reinterpret_cast&lt;const TypeFoParametr*&gt;(data); 1) Скажите пожалуйста, если...

Не получается reinterpret_cast<uint64_t> - C++
double x; uint64_t u; TDoubleMantissFormatMarker f; x=1.23456e+2; u=reinterpret_cast&lt;uint64_t&gt;(x); на 5-ю строку пишет: .

Как работает reinterpret_cast? - C++
не пойму как работает reinterpret_cast? вот если мне надо например данные привести в бинар для сохранения в файл, я пишу: int value =...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru