Допустим, перед нами стоит задача сохранения данных в файл для последующей загрузки. В целях экономии места и повышения производительности файл хочется сделать бинарным (формат хранимых структур очень простой и точно никогда не изменится). При этом, однако, хочется кросс-платформенности (чтобы файл сохранённый, скажем, на x86, нормально прочитался программой, собранной под ARM и т. д.).
С целыми числами всё понятно - используем типы фиксированной разрядности (типа int32_t), также при сохранении переводим к фиксированному порядку байт (либо всегда в little-endian, либо всегда в big-endian) как это делает htonl и аналоги. По идее этого должно быть достаточно.
А что насчёт float/double? Насколько их внутреннее представление может отличаться между платформами, поддерживающими стандарт Си? Как можно максимально эффективно преобразовать их в единую форму для сохранения и обратно? (может быть есть какие-то стандартные функции или хотя бы хорошие библиотеки, либо вовсе достаточно 2-3 строчек без всяких библиотек).