[Zurück] Inhaltsverzeichnis

Verwendung der "Simple DirectMedia Layer"-API

Bytereihenfolge

  • Die Bytereihenfolge ("big endian" / "little endian") des Systems feststellen

Das C-Präprozessor-Define SDL_BYTEORDER ist abhängig vom aktuellen System als SDL_LIL_ENDIAN oder SDL_BIG_ENDIAN definiert.

Ein Little-Endian-System legt die Hexadezimalzahl 0xABCD in folgender Reihenfolge ab:
     0xD 0xC 0xB 0xA
Ein Big-Endian-System hingegen in folgender Reihenfolge:
     0xA 0xB 0xC 0xD

Tip:
x86-Systeme sind "little endian", PPC-Systeme "big endian".
Beispiel:
#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
  • Bei Systemen mit anderer Reihenfolge Bytes vertauschen

SDL stellt für das Vertauschen der Bytereihenfolge in "SDL_endian.h" schnelle Macros zur Verfügung: SDL_Swap16() und SDL_Swap32(). Es gibt auch Macros, die die Daten von einer bestimmten Bytefolge in die des lokalen Systems umwandeln.

Tip:
Wenn man die Bytereihenfolge nur feststellen, aber keine Daten vertauschen muß, kann man SDL_byteorder.h statt SDL_endian.h verwenden.
Beispiel:
#include "SDL_endian.h"

void ZeileLesen16(FILE *datei, Uint16 *zeile, int laenge)
{
    fread(zeile, laenge, sizeof(Uint16), datei);
    if ( SDL_BYTEORDER == SDL_BIG_ENDIAN ) {
        int i;
        for ( i=laenge-1; i >= 0; --i )
            zeile[i] = SDL_SwapLE16(zeile[i]);
    }
}

[Zurück] Inhaltsverzeichnis