[Anterior] Tabla De Contenido

Usando la API de Simple DirectMedia Layer

Independencia del peso del sistema

  • Determinando el peso del sistema del sistema actual

El preprocesador de C define el símbolo SDL_BYTEORDER como SDL_LIL_ENDIAN o SDL_BIG_ENDIAN, dependiendo del orden de los bytes del sistema actual.

Un sistema de byte menos significativo primero(little endian) escribe datos a disco de la siguiente manera:
     [bytes bajos] [bytes altos]
Un sistema de byte más significativo primero(big endian) escribe datos a disco de la siguiente manera:
     [bytes altos] [bytes bajos]

Pista:
Los sistemas x86 son de tipo byte menos significativo primero(little endian) y los sistemas PPC son de tipo byte más significativo primero(big endian).
Ejemplo:
#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
  • Intercambiar datos entre sistemas de distinto peso

SDL facilita un conjunto de macros en SDL_endian.h, SDL_Swap16() y SDL_Swap32(), los cuales intercambian el peso de los datos por tí. Esisten asimismo macros que intercambian datos de un peso en particular al peso del sistema local.

Pista:
Si simplemente necesitas conocer el orden de los byes, pero no usar todas las funciones de intercambio, incluye SDL_byteorder.h en lugar SDL_endian.h
Ejemplo:
#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]);
    }
}

[Anterior] Tabla De Contenido