Введение в 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]);    }}

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




    Содержание  Назад  Вперед