Невозможно просто так написать двоичную структуру и сделать ее доступной для чтения любой системой.Хотя вы можете использовать некоторую библиотеку, которая определяет типы, такие как int32
, это не решит вашу проблему.
Различные процессоры используют разные порядки байтов и могут требовать различного выравнивания.Кроме того, заполнение зависит от реализации.К счастью, все текущие процессоры, о которых я знаю, используют двойное дополнение для целочисленного представления, а не однозначное или знаковое, поэтому целые числа, по крайней мере, имеют одинаковое двоичное представление (по порядку байтов по модулю).
Нет #pragma
может быть действительно переносимым решением, так как они по определению определены реализацией, и вы не можете быть уверены, что разные компиляторы будут обращаться с ними одинаково.Еще несколько спецификаторов работают над следующим стандартом C ++, но в течение некоторого времени они не будут такими уж общими.
Что вам нужно будет сделать, это указать struct
с помощьючто-то вроде int32
, а затем разбить его на поток байтов и снова собрать на другом конце.Посмотрите "сериализация".