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