[Prev]
Table Of Contents
Using the Simple DirectMedia Layer API
Endian independence
- Determine the endianness of the current
system
The C preprocessor define SDL_BYTEORDER is defined
to be either SDL_LIL_ENDIAN or SDL_BIG_ENDIAN,
depending on the byte order of the current system.
A little endian system that writes data to disk has it laid out:
[lo-bytes] [hi-bytes]
A big endian system that writes data to disk has it laid out:
[hi-bytes] [lo-bytes]
|
Tip:
x86 systems are little-endian, PPC systems are
big-endian. |
Example:
#include "SDL_endian.h"
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
#define SWAP16(X) (X)
#define SWAP32(X) (X)
#else
#define SWAP16(X) SDL_Swap16(X)
#define SWAP32(X) SDL_Swap32(X)
#endif
|
- Swap data on systems of differing
endianness
SDL provides a set of fast macros in SDL_endian.h,
SDL_Swap16() and SDL_Swap32(), which swap data
endianness for you. There are also macros defined
which swap data of particular endianness to the local
system's endianness.
|
Tip:
If you just need to know the system byte-order, but don't
need all the swapping functions, include SDL_byteorder.h
instead of SDL_endian.h |
Example:
#include "SDL_endian.h"
void ReadScanline16(FILE *file, Uint16 *scanline, int length)
{
fread(scanline, length, sizeof(Uint16), file);
if ( SDL_BYTEORDER == SDL_BIG_ENDIAN ) {
int i;
for ( i=length-1; i >= 0; --i )
scanline[i] = SDL_SwapLE16(scanline[i]);
}
}
|
[Prev]
Table Of Contents
|