如何判断计算机大小端

这里先介绍一下什么是大小端

大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中

小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中

对于int a = 0x11223344

内存 【】 【】 【】 【】 【】 【】是由低到高的

存放方式为 【11】【22】【 33】 【44】  就是小端

存放方式为 【44】【33】【 22】 【11】就是大端

现在我们判断在计算机中内存的存储到底是大端还是小端

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
//判断大小端


int main()
{
	int a = 1;
	//1的16进制为 00 00 00 01
	//如果为大端则存储地址应为 00 00 00 01
	//如果为小端则存储地址应为 01 00 00 00
	//所以判断大小端只需要将首地址取出并解引用即可
	//从指针的解引用可以知道char*类型的指针访问一个字节的地址,
	//所以我们将int类型的地址转换为char*类型,然后再对它解引用,
	//如果为1则为小端,为0则为大端
	//这里定义一个int类型的p用来存放首地址
	int p = *((char*)&a);
	if (p == 1)
	{
		printf("小端");
	}
	else
	{
		printf("大端");
	}
	return 0;
}

说到判断大小端问题,这里引用一个知识,共用体

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)

我们也可以用共用体来判断大小端,这样更加方便。

#include<stdio.h>
int Duan()
{
	//定义一个匿名共用体
	//用过一次就不用管了,节省空间
	//还是以1为例 00 00 00 01
	union
	{
		//使a=1,所以内存占比假设为 01 00 00 00	
		int a;
		//那么对于char i 来说 它所占内存地址就为01 ,这时我们可以判断i的值来确定大小端
		char i;
	}u;  //定义一个共用体变量u
	u.a = 1;
	return u.i;
}
int main()
{
	int ret = Duan();
	if (ret == 1)
	{
		printf("小端");
	}
	else
	{
		printf("大端");
	}
	return 0;
}

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值