[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
|