[Precedente]
Contenuti
Usare la Simple DirectMedia Layer API
Endian independence
- Determinare il modo endian usato dal
sistema
Il preprocessore C definisce il simbolo SDL_BYTEORDER,
che puo' essere SDL_LIL_ENDIAN o SDL_BIG_ENDIAN, in base
all'ordine dei byte usati dal sistema in uso.
Un sistema little endian scrive cosi' i dati sul disco:
[lo-bytes] [hi-bytes]
Un sistema big endian, invece, scrive cosi' i dati:
[hi-bytes] [lo-bytes]
|
Suggerimento:
I sistemi x86 sono little endian, i PPC sono
big endian. |
Esempio:
#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
|
- Convertire i dati tra i diversi modi
endian
SDL fornisce due veloci macro in SDL_endian.h,
SDL_Swap16() e SDL_Swap32(), che scambiano i dati
tra i diversi sistemi. Ci sono anche macro che
convertono dati espressi in uno specifico modo
al modo utilizzato dal sistema corrente.
|
Suggerimento:
Se si ha necessita' di sapere l'ordine dei byte usato
dal sistema, ma non si prevede di utilizzare le funzioni
di conversione, e' opportuno includere byteorder.h anziche'
SDL_endian.h |
Esempio:
#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]);
}
}
|
[Precedente]
Contenuti
|