Вы не должны делать это вообще.Структуры данных C не имеют обязательной универсальной структуры памяти, которая одинакова для всех архитектур и платформ.Когда вы сериализуете данные, вы всегда должны разбивать их на отдельные части (целые числа и байтовые последовательности), и, кроме того, вам придется указывать размер и порядок (порядковый номер) всех многобайтовых полей, таких как целые числа.
Представьте себечто вы найдете блок байтов на улице.Как бы вы узнали, что это значит?Когда вы сериализуете, вы должны опубликовать спецификацию формата, что-то, что вы могли бы применить к найденным байтам, и сказать: «это первое целое число», «это последовательность байтов, подсчитанная ранее прочитанным целым числом»,и т. д. С помощью этой информации соответствующий десериализационный код может перестроить внутреннюю структуру данных.
Типичное поле сериализации будет выглядеть как «32-разрядное целое число без знака с прямым порядком байтов».Это означает, что вы должны записать байты n & 0xFF
, (n >> 8) & 0xFF
, (n >> 16) 0xFF
, (n >> 24) & 0xFF
, и вы прочитаете обратно в buf[0] + (buf[1] << 8) + (buf[2] << 16) + (buf[3] << 24)
.Обратите внимание, что вам никогда не придется ничего знать о вашей платформе, а только о формате проводов.