字节序无关
时间:2006-05-26 来源:whtonline
根据当前系统的字节序,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]); } } |
相关阅读 更多 +