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

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,说明是小端的,具体分析如图:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值