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