zoukankan      html  css  js  c++  java
  • 判断机器大小端的两种实现方法

    大端模式(Big-endian):
      指数据的低位(就是权值较小的后面那几位)保存在内存的高地址中,而数据的高位,保存在内存的低地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;
    小端模式(Little-endian):
      指数据的低位保存在内存的低地址中,而数 据的高位保存在内存的高地址中,和我们的逻辑方法一致。



    判断大小端方法

    1、利用指针强制类型转换; 2、利用共用体所有数据共用同一块地址空间



    1、利用指针强制类型转换

    #include<stdio.h>  
    int main()  
    {  
        int a = 1;  
        char * p = (char*)&a;  
        if (*p == 1)  
        {  
            printf("little-endian");  
        }  
        else  
        {  
            printf("big-endian");  
        }  
        return 0;  
    }  

    如果小端方式中(i占至少两个字节的长度)则i所分配的内存最小地址那个字节中就存着1,其他字节是0;大端的话则1在i的最高地址字节处存放。char是一个字节,所以强制将char型量p指向i则p指向的一定是i的最低地址,那么就可以判断p中的值是不是1来确定是不是小端。
    2、利用共用体所有数据共用同一块地址空间

    #include<stdio.h>
    union A
    {
        char c;
        int  a;
    }A;
    int main()
    {
        A.a= 1;
        if (A.c == 1)
        {
            printf("little-endian");
        }
        else
        {
            printf("big-endian");
        }
        return 0;
    }

    联合体union的存放顺序是所有成员都从低地址开始存放,所以很容易就判别出机器的大小端了。 ^_^这里写图片描述

  • 相关阅读:
    markdown 常用语法 (在macdown内使用正常)
    C# MessageBox常用用法
    C# 正则表达式匹配汉字
    C# 可视化读取文件、文件夹
    Xcode UUID查询
    Xcode 常用快捷键
    iOS __weak __strong WeakSelf StrongSelf
    iOS 图形图像动画 Core Animation
    iOS Runtime学习笔记
    iOS NSDate本地化
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12538096.html
Copyright © 2011-2022 走看看