= Byte Order and Byte Swapping = '''Include File(s):''' [http://hg.libsdl.org/SDL/file/default/include/SDL_endian.h SDL_endian.h] == Introduction == This category contains functions for handling endian-specific values. Simple data types like integers and floats consist of several bytes. A 32bit integer (Sint32), for example, uses four bytes (as each byte has 8 bits). Endianness describes how the system orders the bytes of this value in memory. Endianness comes in two forms - big and little. * SDL_LIL_ENDIAN means byte order is 1234, where the least significant byte is stored first * SDL_BIG_ENDIAN means byte order is 4321, where the most significant byte is stored first ''Example:'' Imagine the 32bit integer number ```16,909,060``` in decimal. In hexadecimal that would be ~+```0x01020304```+~.
```0x01``` is the most significant byte (the one that increases the value the most. {{{0x04}}} is the least significant byte (as it increases the value the least).
When that is stored in memory on a little-endian system they are stored with the least significant byte first, producing the byte stream: ```0x04 0x03 0x02 0x01```
When that is stored in memory on a big-endian system they are stored with the most significant byte first, producing the byte stream: ```0x01 0x02 0x03 0x04```
For further information about endianness read the [https://en.wikipedia.org/wiki/Endianness Wikipedia] article on the subject. SDL_BYTEORDER is a macro that corresponds to the byte order used by the processor type it was compiled for. * SDL_BYTEORDER is SDL_LIL_ENDIAN for x86, x64, and similar systems that use the little endian byte order. * SDL_BYTEORDER is SDL_BIG_ENDIAN for PowerPC and similar systems that use the big endian byte order. == Functions == <> * [[SDL_Swap16]] * [[SDL_Swap32]] * [[SDL_Swap64]] * [[SDL_SwapBE16]] * [[SDL_SwapBE32]] * [[SDL_SwapBE64]] * [[SDL_SwapFloat]] * [[SDL_SwapFloatBE]] * [[SDL_SwapFloatLE]] * [[SDL_SwapLE16]] * [[SDL_SwapLE32]] * [[SDL_SwapLE64]] ---- CategoryCategory