[前一页] 目录

使用SDL

字节序无关

  • 侦测当前系统的字节序

根据当前系统的字节序,C预处理定义SDL_BYTEORDER要么定义成SDL_LIL_ENDIAN,要么是SDL_BIG_ENDIAN。

小端字节序系统写磁盘时的数据安排: 
     [低字节] [高字节]
大端字节序系统写磁盘时的数据安排: 
     [高字节] [低字节]

提示:
x86系统是小端字节序系统; PPC系统是大端字节序系统。
例程:
#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]);
    }
}

[前一页] 目录