Введение в Simple DirectMedia Layer


Независимость от порядка байтов


  • Определение порядка байтов в текущей системе

Препроцессор 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]);    }}

[Назад] Содержание

 




- Начало -  - Назад -  - Вперед -