firstvald 14 29 декабря, 2023 Опубликовано 29 декабря, 2023 · Жалоба 3 hours ago, jcxz said: Ну да - в таком буреломе на пустом месте, больше размышлять придётся ища баги. Не до попаданий будет. И ещё не забывая всё это безобразие перепахивать по новой при малейшем изменении структуры. Зачем ваять лисапед с треугольными колёсами, вместо того чтобы воспользоваться штатными возможностями компилятора?? Вы и 32-разрядные числа тоже поразрядно складываете? Снимая элемент случайности. штатные возможности компилятора могут сработать в очень конкретном случае. когда мы разбираем структуру на байтики в пределах одного проекта. нам ведь потом эти байтики обратно складывать в структуру. в этом случае это работает. в принципе, нас даже не интересует: что и как там складывается, более того, спокойно пройдет упаковка с дырками (если закрыть глаза на размер). а вот если разобранную структуру передаем вовне и из байтиков нужно будет ее опять сложить в структуру , скажем, в компе или в другом контроллере, вот тут вот компилятору делать нечего - здесь нужно жестко задавать что где будет. ну и счастливчики работавшие с микрочипом знают что float в микрочипе это вовсе не 4 байта, а три. а double вовсе не 8 байт а 4. и упаковка и распаковка таких разночтений простым костылем типа объединения не получится. upd заглянул остался ли этот ужас у микрочипа. ужас изменился: float - 4 байта, а double и long double тоже 4 байта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_pv 52 29 декабря, 2023 Опубликовано 29 декабря, 2023 · Жалоба кто-нибудь объясните откуда ещё три лишних байта у этой структуры в конце появилось? два раза по три байта перед флоатами понятно, но в конце-то зачем? offsetof(LOG_Type, Year) == 24 или не только положение самой структуры должно быть кратно самому большому её члену (align), но и размер тоже? 5 hours ago, firstvald said: затаскиваю в специально созданный union в котором будет 2 short int 1 float и 4 char как это помогает с паддингом и выравниванием этих union внутри структуры? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
firstvald 14 29 декабря, 2023 Опубликовано 29 декабря, 2023 · Жалоба 8 minutes ago, _pv said: кто-нибудь объясните откуда ещё три лишних байта у этой структуры в конце появилось? два раза по три байта перед флоатами понятно, но в конце-то зачем? offsetof(LOG_Type, Year) == 24 или не только положение самой структуры должно быть кратно самому большому её члену (align), но и размер тоже? как это помогает с паддингом и выравниванием этих union внутри структуры? никак. что и как лежит в структуре становится неважно. из юниона байты кладем туда куда хотели положить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Палыч 6 29 декабря, 2023 Опубликовано 29 декабря, 2023 · Жалоба 4 часа назад, jcxz сказал: А при чём тут...? Вроде разговор был про "выравнивание членов структуры", а не про "порядок байт" При том, что протоколы разные бывают, и не всегда для передачи данных из некой структуры еë содержимое нужно выравнивать до байта и передавать "байт за байтом". Иной раз, выгоднее при приëме взять из приëмника некое число байт, привести к нужному виду и положить в элемент структуры. Или обратная процедура при передаче. В этом случае: выравнивание данных - "от лукавого". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться