Ответ на вопрос "... выложенный одинаково даже на других платформах ...", как правило, нет. Это так, даже если рассматриваются такие проблемы, как разные процессоры и / или разные порядковые номера.
Различные операционные системы (даже на одной аппаратной платформе) могут использовать разные представления данных; обычно это называется «платформа ABI» и отличается, например, между 32-битная / 64-битная Windows, 32-битная / 64-битная Linux, MacOSX.
'# pragma pack' - это только половина пути, потому что за пределами ограничений на выравнивание могут быть различия в размере типов данных. Например, «long» в 64-битной Windows - 32-битная, в то время как в Linux и MacOSX - 64-битная.
Тем не менее, проблема, очевидно, не нова и уже решалась в прошлом - стандарт удаленного вызова процедур (RPC) содержит механизмы для того, как определять структуры данных независимым от платформы способом и как кодировать / декодировать «буферы», представляющие эти структуры. Он называется «XDR» (внешнее представление данных). См. RFC1832.
В процессе программирования это колесо было изобретено несколько раз; конвертируете ли вы в XML, работаете на низком уровне самостоятельно с XDR, используете google :: protobuf, boost или Qt :: Variant, есть из чего выбирать.
С чисто стороны реализации: для простоты просто предположим, что "unsigned int" везде 32-битное выравнивание на 32-битной границе; если вы можете закодировать все свои данные в виде массива 32-битных значений, то единственная проблема с экстернализацией, с которой вам придется иметь дело, - это endianness.