• 大小端判断


     
      大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位,保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
      小端模式,是指数据的高位保存在内存的高地址中,而数 据的低位保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低,和我们的逻辑方法一致。
     
    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;
    }
  • 相关阅读:
    eclipse——插件报错:Could not find node.js
    常用css设置
    前端跨域常见的处理方法
    刷新建设批次为空的sql
    PostgreSQL 添加字段语句
    查询在A表有记录数据,B表没有记录数据的SQL
    postgreSql 备份复制表结构和数据 SQL语句
    删除site_planning_id 和version 重复的,如果有多个版本,留下版本号最高的
    leetcode 精选top面试题
    leetcode 精选top面试题
  • 原文地址:https://www.cnblogs.com/yangtze736-2013-3-6/p/3635610.html
Copyright © 2020-2023  润新知