#if !defined(ENDIAN_HPP) #define ENDIAN_HPP //______________________________________________________________________________ // // endian.hpp // Facilitate endian conversions. //namespace xxx //{ //-------------------------------------- inline bool big_endian() { long lTest = 1; return (reinterpret_cast(&lTest)[0] == 0); } //-------------------------------------- inline short swap_endian(short i16) { return i16 << 8 & 0xff00 | i16 >> 8 & 0x00ff; } //-------------------------------------- inline unsigned short swap_endian(unsigned short ui16) { return ui16 << 8 & 0xff00 | ui16 >> 8 & 0x00ff; } //-------------------------------------- inline unsigned int swap_endian(unsigned int i32) { return i32 << 24 & 0xff000000 | i32 << 8 & 0x00ff0000 | i32 >> 8 & 0x0000ff00 | i32 >> 24 & 0x000000ff; } //-------------------------------------- inline int swap_endian(int ui32) { return ui32 << 24 & 0xff000000 | ui32 << 8 & 0x00ff0000 | ui32 >> 8 & 0x0000ff00 | ui32 >> 24 & 0x000000ff; } //-------------------------------------- inline short big_endian(short i16Native) { if (big_endian()) { return i16Native; } return swap_endian(i16Native); } //-------------------------------------- inline unsigned short big_endian(unsigned short ui16Native) { if (big_endian()) { return ui16Native; } return swap_endian(ui16Native); } //-------------------------------------- inline unsigned int big_endian(unsigned int i32Native) { if (big_endian()) { return i32Native; } return swap_endian(i32Native); } //-------------------------------------- inline int big_endian(int ui32Native) { if (big_endian()) { return ui32Native; } return swap_endian(ui32Native); } //-------------------------------------- inline short little_endian(short i16Native) { if (!big_endian()) { return i16Native; } return swap_endian(i16Native); } //-------------------------------------- inline unsigned short little_endian(unsigned short ui16Native) { if (!big_endian()) { return ui16Native; } return swap_endian(ui16Native); } //-------------------------------------- inline unsigned int little_endian(unsigned int i32Native) { if (!big_endian()) { return i32Native; } return swap_endian(i32Native); } //-------------------------------------- inline int little_endian(int ui32Native) { if (!big_endian()) { return ui32Native; } return swap_endian(ui32Native); } //-------------------------------------- inline short native_endian(short i16, bool bBigEndian) { if (big_endian() != bBigEndian) { return swap_endian(i16); } return i16; } //-------------------------------------- inline unsigned short native_endian(unsigned short ui16, bool bBigEndian) { if (big_endian() != bBigEndian) { return swap_endian(ui16); } return ui16; } //-------------------------------------- inline unsigned int native_endian(unsigned int i32, bool bBigEndian) { if (big_endian() != bBigEndian) { return swap_endian(i32); } return i32; } //-------------------------------------- inline int native_endian(int ui32, bool bBigEndian) { if (big_endian() != bBigEndian) { return swap_endian(ui32); } return ui32; } //} // namespace xxx #endif // ENDIAN_HPP