Решают ли типы фиксированного размера эту проблему
Не совсем.
Типы фиксированного размера имеют фиксированные размеры, но их требования выравнивания (и, следовательно, отступы) могут различаться в зависимости от платформы и / или разновидностей ABI. Таким образом, ваша структура может по-прежнему иметь разную компоновку на разных платформах даже с одним и тем же порядком байтов.
Вы можете настаивать на том, что не должно быть заполнения, и использовать какой-то специфичный для компилятора и нестандартный способ указать это (например, #pragma pack
или __attribute__((packed))
). Это может привести к худшему коду для прямого доступа к выровненным элементам.
Что еще я должен рассмотреть, чтобы создать мультиплатформенный двоичный файл?
Если вы выбираете порядок байтов, используете типы фиксированного размера и правильно указываете выравнивание, вы, вероятно, в порядке.
Я бы настоятельно рекомендовал добавить заголовок и / или некоторую информацию об кадре с версией и, возможно, некоторыми метаданными о выбранных вами размерах и выравниваниях. В противном случае вы никогда не сможете изменить этот формат файла в будущем без неприятных последствий.