[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