|
42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 199
|
|||||||||||
Приведение структуры к uint32_t24.08.2017, 14:49. Показов 4559. Ответов 22
Метки нет (Все метки)
Добрый день!
Есть переменная пользовательского типа, представляющая собой структуру размером 32 байта, хочу получить ее значение в переменной типа uint32_t, как это лучше сделать? Структура
1
|
|||||||||||
| 24.08.2017, 14:49 | |
|
Ответы с готовыми решениями:
22
Как побитово скопировать uint32_t в float, минуя при этом выделения uint32_t в оперативную память Преобразовать uint8t* to uint32_t uint32_t this decimal constant is unsigned only in ISO C90 |
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
||||||
| 24.08.2017, 14:57 | ||||||
Сообщение было отмечено dopleref как решение
Решение
dopleref,
4
|
||||||
|
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
|
|
| 24.08.2017, 14:57 | |
|
dopleref, Я сам не делал такого, но думаю, нужно двигаться в сторону перегрузки преобразования пользовательских типов
1
|
|
|
зомбяк
1585 / 1219 / 345
Регистрация: 14.05.2017
Сообщений: 3,940
|
|
| 24.08.2017, 15:14 | |
|
0
|
|
|
42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 199
|
||||
| 25.08.2017, 08:19 [ТС] | ||||
|
Добавлено через 10 секунд
но в данном случае я не могу менять код определяющий используемую структуру. Хотел просто как нибудь 'скастовать', но похоже без memcpy или оператора приведения типа тут не обойтись. Спасибо большое за ответы!
0
|
||||
|
42 / 52 / 33
Регистрация: 15.12.2015
Сообщений: 199
|
||||||
| 28.08.2017, 10:37 [ТС] | ||||||
|
Если кому-то интересно, нашел еще такой вариант используя 'кастование':
0
|
||||||
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
|||||||
| 28.08.2017, 11:26 | |||||||
0
|
|||||||
|
73 / 69 / 38
Регистрация: 09.10.2012
Сообщений: 238
|
|||
| 28.08.2017, 20:31 | |||
|
0
|
|||
|
Неэпический
|
|
| 28.08.2017, 21:05 | |
|
0
|
|
|
73 / 69 / 38
Регистрация: 09.10.2012
Сообщений: 238
|
|
| 28.08.2017, 21:29 | |
|
Croessmah, и все же. Хочу разобраться.
1. Чем reinterpret_cast хуже memcpy (будем считать, что sizeof(uint32_t) == sizeof(abtci_protocol_header))? 2. Про union. UB - запись в одно поле и чтение из другого?
0
|
|
|
73 / 69 / 38
Регистрация: 09.10.2012
Сообщений: 238
|
||
| 29.08.2017, 23:17 | ||
|
Мне кажется я видел достаточно много кода с применением union как в сообщении.
Добавлено через 9 минут
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 29.08.2017, 23:23 | |
|
1
|
|
|
73 / 69 / 38
Регистрация: 09.10.2012
Сообщений: 238
|
||
| 29.08.2017, 23:28 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 29.08.2017, 23:32 | |
|
1
|
|
|
73 / 69 / 38
Регистрация: 09.10.2012
Сообщений: 238
|
|
| 29.08.2017, 23:33 | |
|
0
|
|
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||
| 30.08.2017, 00:30 | |||
|
mishelle92, читать из неактивного члена дозволяется если хранящиеся объекты layout-compatible.
9.5/1
Тем не менее, прием c union довольно прочно укоренился среди программистов и компиляторы, как правило, не мешают ожидаемомоу поведению. С точки же зрения теории тут не все так однозначно. Почитать советую правило 97 из книжки Стандарты программирования на С++ и вот этот пост на stackoverflow (за разумное время написать лучше вряд ли будет можно). Про reinterpret_cast и strict aliasing есть еще вот такая статья: http://dbp-consulting.com/tuto... asing.html, почитай, она хорошо раскрывает в том числе и способ решения через union. Но еще важное, о чем тут не сказали, alignment для bit-field - implementation defined, padding для bit-field - тоже. 9.6/1
В общем, что я хочу сказать: не надо пользоваться сомнительными способами, сознательно закладывать в код не очень чистые приемы. И если ты сходу не сможешь вспомнить все ограничения и оговорки, которые накладывают вышеупомянутые "хакерские" способы, то и не стоит их применять. memcpy для известного на этапе компиляции размера на современных компиляторах превращается в одну или две инструкции. Можно сравнить: https://godbolt.org/g/k4PtzL. Никакой потери эффективности не будет в большинстве случаев, при полном сохранении корректности кода. Без оговорок и спорах об UB.
4
|
|||
|
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
|
|||||||||||||||||||
| 30.08.2017, 11:49 | |||||||||||||||||||
Может кто-нибудь привести пример компилятора, на котором значения n1, n2, n3 будут различны?
0
|
|||||||||||||||||||
|
19491 / 10097 / 2460
Регистрация: 30.01.2014
Сообщений: 17,805
|
|||||||
| 30.08.2017, 12:09 | |||||||
|
Alex5, твой пример как раз попадает под "One special guarantee", т.е. это точно легальный код.
Что касается разных типов, то тут все сложнее. Да, стандарт явно не пишет, что, дескать такое использование union - undefined behaviour, но и при этом и не регламентирует это поведение (за исключением специально оговоренных layout-compatible типов). Т.е. стандарт дает гарантии насчет одинаковых типов (см. определение common initial sequence), но ничего не говорит насчет разных. Можно привести контр-пример:
В более простых случаях, когда мы можем implementation-defined способами обеспечить совместимость типов - это будет работать (например, как в твоем примере на первой странице). Но это не означает автоматически легальность. Это означает, что мы для нашей реализации все учли и получили (для нашей реализации) предсказуемое поведение. Да, мы молодцы и это работает. Но стандарт на это гарантий нам не дал. И еще, прошу, прежде чем продолжать, изучить все материалы, ссылки на которые я дал. Возможно это снимет часть вопросов. Добавлено через 3 минуты Однако дискуссия уже перешла в другую плоскость, где отдельно обсуждаются собственные проблемы reinterpret_cast, и отдельно - собственные проблемы union. Это надо учитывать. А вот memcpy собственных проблем не имеет (ну, кроме потенциального оверхеда на вызов функции).
0
|
|||||||
|
17 / 16 / 3
Регистрация: 18.08.2017
Сообщений: 54
|
|||
| 30.08.2017, 14:09 | |||
|
Можно ли относиться к типу T как к структуре с единственным полем типа T, по аналогии с тем, как стандарт в некоторых аспектах позволяет относиться к переменным не-массивам как к массивам с одним элементом?
0
|
|||
| 30.08.2017, 14:09 | |
|
Помогаю со студенческими работами здесь
20
Приведение структуры матрицы к ленточной Рефлексия: как происходит приведение из object в производные классы и структуры SysTick_GetPeriod(uint32_t frequency) C + IAR + uint32_t to char Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|