大端:二进制数据低位,存放于内存栈中的高地址处,二进制高位在栈中的低地址处
小端:二进制数据低位,存放于内存栈中的低地址处,二进制高位在栈中的高地址处
PS:大端:小头在高处,尾巴在低处 小端 :小头在低处,尾巴在高处
//大小端检测函数
if (check_sys())
printf("小端\n");
else
printf("大端\n");
int check_sys() {
int a = 1;
char* p = (char*)&a;
//*p == 1; 说明字节地位在前;
return (*p);
}
// int a = 00000000 00000000 00000000 00000001
二进制高位 二进制地位:00000001
//内存中十六进制存储:第一种: 00 00 00 01 大端 (二进制低位,在栈中高地址处)
// 第二种: 01 00 00 00 小端 (二进制低位,在栈中低地址处)
编译器中内存存储的a
当发生截断,截断从二进制低位开始保留,二进制高位会被舍去,截断后的结果分两种;
(char*)&a = 0x01 ==char *p 返回1;
(char*)&a = 0x00 ==char *p 返回0;
返回的就会是编译器在低位置存放的二进制数据;
为0,说明存储的是0x00 00 00 01;
为1,说明存储的是0x10 00 00 00;
注:不同编译器存储方式可能会有差别