一、定义
小端模式是把数据的高位存放在高地址处,低位存放在内存的低地址处;
大端模式是把数据的高位存放在低地址处,低位存放在内存的高地址处,类似于存储字符串的感觉。
二、举例:
int a=0x12345678;并假设变量a的起始地址为0x10000000,则有如下结果:
内存地址 | 大端模式 | 小端模式 |
0x10000000 | 0x12 | 0x78 |
0x10000001 | 0x34 | 0x56 |
0x10000002 | 0x56 | 0x34 |
0x10000003 | 0x78 | 0x12 |
三、检测一个CPU是大端模式还是小端模式
方法一:利用强制类型转化,代码如下
#include "stdio.h"
int main(void)
{
int a=0x12345678;
char b=(char)a;
printf("addr(a)=0x%08x\n",&a);
printf("a=0x%X\n",a);
printf("b=0x%X\n",b);
if(b==0x12)
{
printf("大端\n");
return 1;
}
else if(0x78 == b)
{
printf("小端\n");
return 0;
}
else
{
printf("ERROR!\n");
return -1;
}
}
方法二、利用联合体的特性(所有成员相对于基地址的偏移量都为0),代码如下:
#include "stdio.h"
int main(void)
{
union
{
int a;
char b;
}check;
check.a=0x12345678;
if(check.b==0x12)
{
printf("大端\n");
return 1;
}
else if(0x78 == check.b)
{
printf("小端\n");
return 0;
}
else
{
printf("ERROR!\n");
return -1;
}
}
四、结果
Inter(R) Core(TM) i5-4570为小端模式;
Power PC 为大端模式。