Собственно, есть кроссплатформенный код. Задача стоит реализовать бинарное сохранение данных, данные потом будут читаться не только с с++.
Я так понял, в Windows Little Endian. Но есть платформы, где у нас Big Endian.
Что я хочу - написать такой код, который гарантировано будет сохранять в сетевом порядке байты (Big Endian).
Что я пока придумал:
Некий макрос, например, отсюда:
stackoverflow.com/questions/2100331/c-macro-defini...
тогда функция будет иметь такой вид:
void saveInt(int a)
{
#ifdef BIG_ENDIAN
save(a);
#else // little endian
int b = htonl(a);
save(b);
#endif
}
Может, можно как-то веселее такое реализовать, а то такую функцию для каждого типа данных писать.
Ну и верно ли я понял, что htons всегда переворачивает байты? Если нет, то получается, такой код не нужен, просто всегда вызывать ее, а у нее внутри что-то вроде кода, который я написал.