Чтобы избежать проблемы с размером, вы должны сделать:
fread(&var1, sizeof(var1), 1, f);
Если вы беспокоитесь о том, что размер int
может варьироваться в зависимости от платформы, которая записывает данные, и платформы, которая считывает данные, то у вас есть более фундаментальная проблема. В этом сценарии следует избегать использования int
, short
и т. Д. И использовать типы, определенные в <stdint.h>
, например int16_t
, uint32_t
.
Для решения проблем с порядком байтов вам следует подумать о написании вспомогательных функций, которые явно пишут / читают отдельные байты в известном порядке, например:
void write_uint32_t(uint8_t *buf, uint32_t x)
{
buf[0] = (uint8_t)(x >> 0);
buf[1] = (uint8_t)(x >> 8);
buf[2] = (uint8_t)(x >> 16);
buf[3] = (uint8_t)(x >> 24);
}
Все вышеперечисленное относится только к целочисленным типам. Для типов с плавающей точкой не существует идеального универсального решения.