В posix системах (в винде проверить не могу, но скорее всего то же где-то должно быть) есть семейство функций для работы с
big endian и little endian.
По поводу твоего вопроса я бы сделал примерно так
unsigned short store(unsigned short s) { return htobe16(s); }
unsigned int store(unsigned int s) { return htobe32(s); }
unsinged long store(unsigned long s) { if (sizeof(unsinged long) == 8) return htobe64(s); else return htobe32(s);}
unsigned short restore(unsinged short s) { return be16toh(s); }
// и т.д.
ну тут как видишь тебе придется еще решить вопрос с unsinged long. он, в зависимости, от битности системы имеет разный размер.
PS. На самом деле big endian встречается сейчас только на встраиваемых системах и на игровых консолях и вообще говоря зависит не от ОС, а от процессора. На x86 и amd64 всегда little endian. По сему подумай - а надо ли тебе это.