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