Независимость от порядка байтов
Препроцессор C заменяет SDL_BYTEORDER на SDL_LIL_ENDIAN (младше-конечные) или SDL_BIG_ENDIAN (старше-конечные), в зависимости от порядка байтов в текущей системе. Младше-конечные системы это те, которые пишут данные на диск размещая так: [младшие байты] [старшие байты] Старше-конечные системы пишут данные на диск так: [старшие байты] [младшие байты] | Совет: В системах x86 младший байт-первый (little-endian), PPC наоборот (big-endian). |
Example:
#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 |
SDL предоставляет совокупность быстродействующих макросов в SDL_endian.h, SDL_Swap16() и SDL_Swap32(), которые производят обмен данными с указаным вами порядком байтов. Также определены макросы для обмена данными со специфичным для данной системы порядком байтов. | Совет: Если вам нужно знать порядок байтов в текущей системе, но не нужны все перестановочные функции, подключите SDL_byteorder.h вместо SDL_endian.h |
Пример:
#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]); }} |
[Назад] Содержание