大端和小端的判断方法

1、字节序(Byter Order):数据(比特、字节、字)等的存储传输机制

2、字节序一般分为:大端字节序(Big-endian)和小端字节序(Litter-endian)。

3、一个数据在各大计算机体系的存储方式不同,因此明白字节序更为重要,那如何区分大端和小端呢?

特点\名称大端小端
存储低地址存放高数据,高地址存放低数据。低地址存放低数据,高地址存放高数据。
传输高数据放在流的开始,低数据放在流的末尾。低数据放在流的开始,高数据放在流的末尾。
举例手机、网络、ARMPC、Inter

4、通过画图来更清楚的看一下大端和小端:


5、通过代码来判断我现在使用的笔记本是小端:

方法一:利用联合体

#include<stdio.h>
void Byteorder1()
{
	union 
	{
		short value;
		char union_bytes[sizeof(short)];
	}test;

	test.value=0x0102;

	if((test.union_bytes[0]==1) && (test.union_bytes[1]==2))//低地址存放高位,高地址存放地位
	{
		printf("big endian\n");
	}

	else if((test.union_bytes[0]==2) && (test.union_bytes[1]==1))//低地址存放低位,高地址存放高位。
	{
		printf("litter endian\n");
	}
	else
	{
		printf("unknow\n");
	}
}
void main()
{
	Byteorder1();
}

方法二:与方法一等价

#include<stdio.h>
bool Byteorder2()
{
	union
	{
		short a;
		char b;
	}ua;
	ua.a=1;

	return ua.b;
}
int main()
{
	if(Byteorder2())
	{
		printf("litter endian\n");
	}
	else
	{
		printf("big endian\n");
	}
}


方法三:(利用强类型转换)

#include<stdio.h>
bool Byteorder3()
{
	short a=1;
	return *(char *)&a==1;
}
int main()
{
	if(Byteorder3())
	{
		printf("litter endian\n");
	}
	else
	{
		printf("big endian\n");
	}
}

最终都输出“litter endian”.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值