[Anterior]
Conteúdo
Usando a API Simple DirectMedia Layer
Independência na ordenação da memória
- Determinando a ordenação da memória do sistema
O pré - processador do C define SDL_BYTEORDER tanto como
SDL_LIL_ENDIAN quanto como SDL_BIG_ENDIAN,dependendo da ordenação do
bytes do sistema atual.
Um sistema do tipo little endian que escreve dados em disco tem a
seguinte ordenação:
[lo-bytes] [hi-bytes]
Um sistema do tipo Big endian que escreve dados em disco tem a
seguinte ordenação:
[hi-bytes] [lo-bytes]
|
Dica:
Sistema x86 são little-endian enquanto PowerPC são big-endian. |
Exemplo:
#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
|
- Inverter dados em sistemas de ordenação diferente
SDL prove um conjunto de rápidas macros em SDL_endian.h,
SDL_Swap16() e SDL_Swap32(), os quais invertem a ordenação para você.Ha
também macros definidos que invertem dados de uma ordenação
em
particular para a ordenação do sistema local.
|
Dica:
Se você somente precisa saber a ordenação de bytes do sistema atual,
mas não precisa de todas as funções e macros de inversão, inclua em
seu projeto SDL_byteorder.h ao invés de SDL_endian.h |
Exemplo:
#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]
Conteúdo
|