如何使用程序判断系统是大端还是小端?

    xiaoxiao2021-03-26  27

    1 第一点,先要明白一个,就是系统在申请内存的时候,是从高地址到低地址还是从低地址到高地址。

    先用下面一个简单的程序来判断申请的内存地址顺序问题。下面是一个典型的内存结构图。

    我们用下面这个程序来检验:

    #include <stdio.h> int main() { int a; int b; printf("%p\n",&a);//先申请a空间 并且a的地址更高 printf("%p\n",&b); return 0; } 输出结果是:

    可以看出,栈空间的申请是从高到低的。

    2 有了上面的概念后,我们开始进行大端小端的分析。

    先引入一则关于大端和小端的故事: 端模式(Endian)的这个词出自Jonathan Swift书写的《格列佛游记》。这本书根据将鸡蛋敲开的方法不同将所有的人分为两类,从圆头开始将鸡蛋敲开的人被归为Big Endian,从尖头开始将鸡蛋敲开的人被归为Littile Endian。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开。在计算机业Big Endian和Little Endian也几乎引起一场战争。在计算机业界,Endian表示数据在存储器中的存放顺序。

    简单来说,大端就是将高位字节放到低位地址空间里,小端就是将高位字节放到高位字节。

    那么如何检测一个系统是大端还是小端,我们可以用下面的代码:

    #include <stdio.h> //判断操作系统是大端还是小端 bool checkendian() { union my { int a; char b; }; my t; t.a=1; return(t.b==1); } int main() { printf("%d\n",checkendian()); return 0; } 结果输出是1,说明是小端的,具体分析如图:

    转载请注明原文地址: https://ju.6miu.com/read-659890.html

    最新回复(0)