|
[Předchozí]
Obsah
Použití Simple DirectMedia Layer API
Nezávislost na pořadí bytů platformy
- Detekce pořadí bytů použitého systému
Makro SDL_BYTEORDER preprocesoru jazyka C je v závislosti
na použitém systému definováno buď jako SDL_LIL_ENDIAN, nebo
jako SDL_BIG_ENDIAN.
Systém označovaný jako "little endian", který zapisuje data na disk, je rozloží takto:
[nižší byty] [vyšší byty]
Systém označovaný jako "big endian", který zapisuje data na disk, je rozloží takto:
[vyšší byty] [nižší byty]
|
Tip:
Systémy x86 jsou little endian, PPC systémy jsou big endian. |
Příklad:
#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
|
- Transformace dat v systémech s odlišným pořadím bytů
SDL poskytuje v SDL_endian.h dvojici rychlých maker,
SDL_Swap16() a SDL_Swap32(),
která vám otočí pořadí bytů.
Také jsou definovaná makra,
která převede data v konkrétním uspořádání do uspořádání
lokálního systému.
|
Tip:
Pokud jen potřebujete znát způsob řazení bytů systému a
nepotřebujete prohazovací funkce, do svého zdrojového kódu zahrňte SDL_byteorder.h
namísto SDL_endian.h. |
Příklad:
#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]);
}
}
|
[Předchozí]
Obsah
|