大小端判断

 
  大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
  小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
 
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;
}

 

posted @ 2014-03-31 14:01  艾丽娅的猫  阅读(424)  评论(0编辑  收藏  举报