#c #boost #padding #endianness #binary-data
Вопрос:
В boost::endian doc мы можем найти, что:
struct S {
big_uint16_ut a;
big_uint32_ut b;
};
это портативный способ выразить то же самое, что:
struct S {
uint16_t a; // big endian
uint32_t b; // big endian
} __attribute__ ((packed));
Я хотел бы использовать эту библиотеку для «анализа» двоичных данных, но я сомневаюсь. Действительно ли гарантируется, что между объектами типов не добавляется заполнение boost::endian::big_*_ut
? Я немного покопался в реализации, и эти типы являются просто классами с массивами char
s внутри. Есть ли в стандарте какое-либо правило, гласящее, что между такими членами не будет добавляться никаких дополнений?
Комментарии:
1. ну, там прямо так и написано, не так ли? Если об этом говорится в документации Boost, то вы можете предположить, что они заставили его работать со всевозможными различными компиляторами.