您的位置:首页 > 其它

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

2013-10-14 14:56 302 查看
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;
}


代码执行结果:



由上面的输出结果可以判断出当前的系统是小端法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: