一、什么是大小端存储模式呢?
这个问题呢就像吃egg一样,那么到底是从小头剥还是从大头剥呢?那我们就来分析一下再剥喽~
所谓大端模式,是指数据的高位,保存在内存的低地址中,而数据的低位保存在内存的高地址中;
小端模式则是指数据的高位存放在内存的高地址中,数据的低位则存放在内存的低地址中;
也许这样你还是有点迷糊,没关系,我刚开始也迷糊,总是记混,那么下面我们用图分析一下
二、那怎么用代码判断机器是大端存储还是小端存储模式呢???
这里我们总结了三种方法,直接抛代码~
利用联合Union的特性:“联合的成员共用同一块空间”
方法一:
int Check()
{
union UN
{
char c;
int i;
}un;
un.i = 1;//0x00000001 如果是小端存储的话1应该表示为0x10000000
return un.c;
}
方法二也是利用联合体:
int Check()
{
union UN
{
char a[4];
int i;
}un;
un.i = 1;
printf("%02hhx%02hhx%02hhx%02hhx\n", un.a[0], un.a[1], un.a[2], un.a[3]);
//02表示整数不够2位就补0
//x是以16进制输出
//hhx表示只输出两位
return un.a[0];
}
方法三:对类型进行强制转化
int Check()
{
int i = 1;
i = *(char*)&i;
return i;
}