大小端
不同的微处理器会使用不同的字节序
其中内存低地址存储低字节,内存高地址存储高字节称为小端(little endian)
反之则称为大端(big endian)
英特尔CPU采取的字节序是小端。Wii、Xbox360、PlayStation3等主机采用的是PowerPC处理器的变种,其字节序预设是大端。
因此在英特尔CPU上开发的游戏,打包到上述主机之前就需要通过Cook进行字节序的转换。
判断方式
基本原理是截断
由于小端架构的低字节放在低位,给一个int
类型赋值以后截断其内存低位,查看结果是否为数值低位。如果内存低位==数值低位,说明是小端架构。
- 可以使用C的联合体来截断
union LittleEndianTestUnion
{
char ch;
int i;
};
bool IsLittleEndian()
{
LittleEndianTestUnion let;
let.i = 0x1234;
return let.ch == 0x34;
}
- 另一种方式也是截断,不用借助联合体直接用类型截断
bool IsBigEndian()
{
int i = 0x1243;
char* ch = (char*) &i;
return *ch == 0x12;
}