#include template T swap_endian(T u) { static_assert (CHAR_BIT == 8, "CHAR_BIT != 8"); union { T u; unsigned char u8[sizeof(T)]; } source, dest; source.u = u; for (T k = 0; k < sizeof(T); k++) dest.u8[k] = source.u8[sizeof(T) - k - 1]; return dest.u; } int main(){ int le = 0x00FF3200, be; be=swap_endian(le); printf("LE: 0x%08x\nBE: 0x%08x\n", le, be); return 0; }