大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
小端模式,是指数据的高位保存在内存的高中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
CPU大小端判断函数,纯C代码
int IsLittleendian( ){ //Little-endian模式的CPU对操作数的存放方式是从低字节到高字节,而Big-endian模式对操作数的存放方式是从高字节到低字节。 //[大小端存储问题]: 小端方式中(i占至少两个字节的长度),i所分配的内存最小地址那个字节中就存着1,其他字节是0. //大端的话则1在i的最高地址字节处存放,char是一个字节,所以强制将char型量p指向i则p指向的一定是i的最低地址, //那么就可以判断p中的值是不是1来确定是不是小端。 //若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1 union w { //联合体union的存放顺序是所有成员都从低地址开始存放 int i; char c; } u; u.i = 1; return(u.c ==1);}
下面是完整的例子
///// Copyright (c) 2013, ShangHai Onewave Inc.//// FileName: judgeBigLittleendian.cpp//// Description://// Created: 2014年03月31日 星期一 13时41分41秒// Revision: Revision: 1.0// Compiler: g++/////#includeusing namespace std;int judgeLittleEndian(){ union{ int i; char c; }u; u.i = 1; return u.c;}int main(){ if(judgeLittleEndian()) cout<<"\tLittle Endian!"<