ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
1 мая
993046 Топик полностью
LightElf (08.04.2020 16:21, просмотров: 520) ответил fk0 на Отлично. Но ты ж сам доказал, что говнокод. На ARMv4. У тебя там что лежит за 16-битным значением окажется не выровненным и на него нельзя будет взять указатель. А сериализация ручками -- она всегда работает, надежно железобетонно. И использование указателей на поля структуры -- нормальный способ, иначе как писать абстрактные функции, а не функции работающие именно с такой структурой. Хотя конечно скалярные значения нормальные люди возвращают вовсе по-значению, но случаи они
Я ж говорю - упертый ты :) В приведенной выше упакованной структуре (стандартном заголовке IP пакета) все поля натурально выровнены. Т.е. uint16_t лежит по смещению, кратному двум, а uint32_t лежит по смещению, кратному четырем. Так задумано изначально не самыми глупыми людьми. Соответственно, если сама структура лежит по адресу кратному четырем, то и все ее поля лежат как положено. И указатели нормально можно брать и использовать. Упаковка нужна, чтобы особо умные 

компиляторы не пытались uint16_t (или даже uint8_t на каких-нибудь TMS320 без байтовых операций) на 4 байта выравнивать. Ну а ежели кто-то приводит адрес uint8_t к указателю на char - то кто ему тогда доктор?

Не надо делать мне как лучше, оставьте мне как хорошо