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

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

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

Reinterpret_cast - C++

22.04.2012, 15:55. Просмотров 700. Ответов 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
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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) =...

2
DU
1483 / 1129 / 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. потом
этот указатель разыменовывается. это конечно же не то же самое, что складывание
двух переменных. Вот поэтому результаты отличаются.
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
22.04.2012, 16:25 #3
Приведение типов
0
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 =...


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

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

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