测试自己的系统是大端还是小端

本文详细解释了大端和小端存储方式的概念,并通过实例展示了它们如何在内存中存放多字节数据。此外,还提供了一段C语言代码用于检测当前系统采用的是哪种字节序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

BIG ENDIAN:最低位地址存放高位字节,可称高位优先,内存从最低地址开始按顺序存放(高数位数字先写)。最高位字节放最前面。
LITTLE ENDIAN:最低位地址存放低位字节,可称低位优先,内存从最低地址开始按顺序存放(低数位数字先写)。最低位字节放最前面。
 
 
 

对于单一的字节(a byte),大部分处理器以相同的顺序处理位元(bit),因此单字节的存放方法和传输方式一般相同。

对于多字节数据,如整数(32位机中一般占4字节),在不同的处理器的存放方式主要有两种,以内存中0x0A0B0C0D的存放方式为例,分别有以下几种方式:

注: 0x前缀代表十六进制。 

数据以8bit为单位:

地址增长方向

...

0x0A

0x0B

0x0C

0x0D

...

示例中,最高有效位(MSB, Most Significant Byte)是0x0A 存储在最低的内存地址处。下一个字节0x0B存在后面的地址处。正类似于十六进制字节从左到右的阅读顺序。

数据以16bit为单位:

地址增长方向

...

0x0A0B

0x0C0D

...

 

测试大端小端的C代码:

#include <stdio.h>
int main()
{
	int i=0x12345678;
	char*p = (char *)&i;
	if(*p == 0x78)
	{
		printf("Litle endian\n");	
	}
		printf("p=%x\n",p);//当前指针变量的值(指向的地址)

		p++;//指针自增

		printf("p++之后,p=%x\n",p);//验证指针自增以后的值(重新指向的地址)
	if(*p == 0x56)
		printf("Litle endian\n");	
		printf("sizeof(p)=%d \n",sizeof(p));
	//测试指针变量所占的字节数,in fact,在win32平台上,任何类型的指针变量所占的字节数均为4.
		p =NULL;
	return 0;	
}


代码执行结果:

由上面的输出结果可以判断出当前的系统是小端法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值