大小端判断
大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
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++ // /////////////////////////////////////////////////////////// #include <iostream> using namespace std; int judgeLittleEndian() { union{ int i; char c; }u; u.i = 1; return u.c; } int main() { if(judgeLittleEndian()) cout<<"\tLittle Endian!"<<endl; else cout<<"\tBig Endian!"<<endl; return 0; }