[Précédente] Table Des Matières

Utiliser l'API Simple DirectMedia Layer

Endian independence

  • Determiner le système d'ordre des bits courant.

Le préprocesseur du C défini SDL_BYTEORDER qui est soit SDL_LIL_ENDIAN soit SDL_BIG_ENDIAN, dépendant de l'ordre de codage des bits du système.

Un système "petit indien" qui désire écrire des données les présente comme ceci :
     [lo-bytes] [hi-bytes]
Un système "grand indien" qui désire écrire des données les présente comme ceci :
     [hi-bytes] [lo-bytes]

Astuce:
Les systèmes x86 sont "petit indien" et les sysèmes ppc sont "grand indien".
Exemple:
#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
  • Permuter les données de différents systemes d'ordre de bits.

SDL fournie un lot de macros performantes dans SDL_endian.h, SDL_Swap16() et SDL_Swap32(), qui change l'ordre des bits pour vous. On trouve aussi des macros qui permutent les données d'un ordre de bits particulier vers le système "indien" local.

Astuce:
Si vous désirez simplement connaître le système de rangement des bits actuel, mais ne désirez pas toutes les fonctions de swap, incluez simplement SDL_byteorder.h au lieu de SDL_endian.h
Exemple:
#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]);
    }
}

[Précédente] Table Des Matières