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

C для начинающих

Войти
Регистрация
Восстановить пароль
 
 
ArtemKolesnikov
23 / 23 / 10
Регистрация: 14.07.2016
Сообщений: 79
#1

Что означает *(uint8_t*)(&pbuf)? - C (СИ)

07.01.2017, 23:14. Просмотров 480. Ответов 22
Метки нет (Все метки)

Всем привет,
C
1
2
uint8_t *pbuf
uint8_t memtype;
Что делается в выражении
C
1
  memtype = *(uint8_t*)(&pbuf);
???
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HighPredator
5428 / 1811 / 332
Регистрация: 10.12.2010
Сообщений: 5,356
Записей в блоге: 3
09.01.2017, 12:09     Что означает *(uint8_t*)(&pbuf)? #21
Evg, хм, у меня было ощущение, что откастовав к целому, они да возьмут первый байт для биг, но он в нормальном представлении таки хвостовой, поэтому он и выходит по факту младшим что там что тут. Или я перемудрил? Не очень хорошо в таком разбираюсь. Просто по механике использования они определяют тип данных, сложенных в буфере. И поскольку они трясут хвостовой байт, сложилось впечатление, что они определяют тип по "выравниванию" на его основе. Что кстати не лишено смысла и по своему элегантно.
Evg
Эксперт CАвтор FAQ
17288 / 5536 / 345
Регистрация: 30.03.2009
Сообщений: 15,064
Записей в блоге: 26
09.01.2017, 12:29     Что означает *(uint8_t*)(&pbuf)? #22
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Допустим, значение указателя pbuf равно 0x11223344. В little-endian в памяти он будет лежать в виде 0x44, 0x33, 0x22, 0x11, а в bug-endian - 0x11, 0x22, 0x33, 0x44

Цитата Сообщение от HighPredator Посмотреть сообщение
И поскольку они трясут хвостовой байт
Не хвостовой, а тот, который в памяти лежит в начальном адресе

Цитата Сообщение от HighPredator Посмотреть сообщение
И поскольку они трясут хвостовой байт, сложилось впечатление, что они определяют тип по "выравниванию" на его основе.
Да всё может быть, но проверка старшего байта в значении адреса с виду больше похоже на организацию памяти во всяких маленьких процессорах. В любом случае если вдруг кому-то не лень, было бы полезно поковыряться по исходникам
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2017, 05:14     Что означает *(uint8_t*)(&pbuf)?
Еще ссылки по теме:

C (СИ) Что означает конструкция #if 0
Что означает символ $? C (СИ)
Что означает запись 1LL? C (СИ)
C (СИ) Что означает условие if(!in)
C (СИ) Что означает запись .5?

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

Или воспользуйтесь поиском по форуму:
ArtemKolesnikov
23 / 23 / 10
Регистрация: 14.07.2016
Сообщений: 79
11.01.2017, 05:14  [ТС]     Что означает *(uint8_t*)(&pbuf)? #23
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Evg Посмотреть сообщение
с виду больше похоже на организацию памяти во всяких маленьких процессорах
Вы были правы.
Разобрался. Указатель pbuf (обобщенный тип указателя) занимает 3 байта памяти, первый байт (который выделяется) содержит информацию о сегменте памяти, в которой хранится значение переменной. У данной железки 0х00 - data , 0х01 - хdata , 0хFE - pdata.
Потом осуществляется приведение к конкретному типу указателя ("память-специфическому" перевел гугл).
Тяжело (долго) у меня понимается, но интересно.
Yandex
Объявления
11.01.2017, 05:14     Что означает *(uint8_t*)(&pbuf)?
Ответ Создать тему
Опции темы

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