超过一个字节的数据在内存中存储时,就有存储顺序的问题,按照不同的存储顺序分为大端字节序存储和小端字节序存储。
大端(存储)模式:
是指数据的低位存储在高地址处,高位存低地址处.
小端(存储)模式:
是指数据的低位存低地址处,高位存高地址处.
高低位的区分: 比如123中的3就为最低位,1为最高位. 16进制的0x11223344中44就是最低位.
int main()
{
int n = 0x11223344;
return 0;
}
调试这行代码:
由图中可以看出VS是小端字节序存储
#include<stdio.h>
int main()
{
int n = 1; //n的16进制表示形式为0x00000001
//如果是大端存储就为 00 00 00 01
//如果是小端存储就为 01 00 00 00
//只拿一个字节,大端存放拿的就是00 小端存放拿的就是01
if(*(char*)&n == 1) //将n强制类型转换为char*类型,每次只访问一个字节,再解引用.
//注意:将n直接强转为char类型是不行的,因为强制类型转化位char拿的总是最低位的一个字节.
printf("小端");
else
printf("大端");
return 0;
}
用函数方式实现
#include<stdio.h>
check_sys()
{
int n = 1;
return *(char*)&n; //*(char*)&n这个表达式的结果无非就是0或1,所以直接返回*(char*)&n就行.
}
int main()
{
int ret = check_sys();
if(ret == 1 )
printf("小端");
else
printf("大端");
}