Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1419959
  • 博文数量: 430
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4388
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-24 18:04
文章存档

2013年(1)

2008年(2)

2007年(14)

2006年(413)

分类: LINUX

2006-05-26 10:22:21

  • 侦测当前系统的字节序

根据当前系统的字节序,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]);
    }
}
阅读(590) | 评论(0) | 转发(0) |
0

上一篇:定时器

下一篇:演示程序

给主人留下些什么吧!~~