zoukankan      html  css  js  c++  java
  • 大小端判断

     
      大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
      小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
     
    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<<"	Little Endian!"<<endl;
            else
                    cout<<"	Big Endian!"<<endl;
    
            return 0;
    }
  • 相关阅读:
    Ubuntu14.04升级cmake版本的方法
    在ubuntu16.04-32bits 下编译vlc和vlc-qt开源项目
    从Ubuntu 14.04 LTS版升级到Ubuntu 16.04 LTS
    如何使用Heartbeat,组建一个高可用性的mysql集群
    VLC和Qt结合编写流媒体rtsp播放器
    How to Analyze "Deadlocked Schedulers" Dumps?---WINDBG
    sqlserver-kit.org
    SQLSERVER ----improvedk
    sql server博客
    分享]国外最新安全推文整理
  • 原文地址:https://www.cnblogs.com/yangtze736-2013-3-6/p/3635610.html
Copyright © 2011-2022 走看看