The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа

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

Использование Simple DirectMedia Layer API

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

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

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



    
}
}

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру