什么是大端小端:
大端(存储)模式,是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(存储)模式,是指数据的低位保存在内存的低地址中,而数据的高位,保存在内存的高地址中;
如:
int a = 20;
00000000000000000000000000010100
数据
0x 00 00 00 14
高位---------低位
内存
小端
14 00 00 00
低地址--高地址
大端
00 00 00 14
低地址--高地址
写一段代码告诉我们当前机器的字节序是什么:
#include<stdio.h> int main() { int a = 1; char* p = (char*)&a; if(*p==1) printf("小端\n"); else printf("大端\n"); return 0; }
下面我们来改进一下这段代码,用函数来实现
#include<stdio.h> int check_sys() { int a = 1; char* p = (char*)&a; if(*p == 1) return 1; else return 0; } int main() { int ret = check_sys(); if(ret == 1) printf("小端\n"); else printf("大端\n"); return 0; }
去掉 if 语句
#include<stdio.h> int check_sys() { int a = 1; char* p = (char*)&a; return *p; } int main() { int ret = check_sys(); if(ret == 1) printf("小端\n"); else printf("大端\n"); return 0; }
改进解引用
#include<stdio.h> int check_sys() { int a = 1; return *(char*)&a; } int main() { int ret = check_sys(); if(ret == 1) printf("小端\n"); else printf("大端\n"); return 0; }
这样我们就得到了最优的代码了,运行结果如下:
可知我们当前的机器字节序为小端