大端模式:是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址端。
小端模式,是指数据的高字节保存在内存的高地址中,低位字节保存在在内存的低地址端。
比如 一个变量x的十六进制表示为 0x01 23 45 67,
如果是大端存储 则是这样存储的
高地址--------->低地址
67 45 23 01 数据的高位 放在低地址 低位放在高地址
而小端模式 是这样
01 23 45 67 数据的低位 放在低地址 高位放在高地址
大小端模式的检测(环境 win7 vs2008)
方法(1)利用利用共用体几个不同的变量共同占用一段内存的性质输出第一个字节
#include <stdio.h>
int check()
{
union UN
{
char c;
int i;
}un;
un.i = 1;
return un.c;
}
int main(void)
{
if(check()==1)
printf("小端模式存储!\n");
else
printf("大端模式存储!\n");
return 0;
}
方法(2)
#include <stdio.h>
int check()
{
int i = 1;
i = *(char*)&i;//取 i 的地址 强制类型转换后解引用
return i;
}
int main(void)
{
if(check()==1)
printf("小端模式存储!\n");
else
printf("大端模式存储!\n");
return 0;
}
方法(3)
#include <stdio.h>
int check()
{
union UN
{
char a [4];
int i ;
} un ;
un .i = 1;
//02 是整数不够2位就补上0 x是以16进制输出 hhx 表示只输出两位
printf ("%02hhx %02hhx %02hhx %02hhx\n", un .a [0], un. a [1],un . a[2], un .a [3]);
return un . a[0];
}
int main(void)
{
if(check()==1)
printf("小端模式存储!\n");
else
printf("大端模式存储!\n");
return 0;
}
输出结果:
01 00 00 00
小端模式存储!
01 00 00 00
小端模式存储!