1、什么是大小端?
所谓的大端模式、小端模式,指的是数据在内存中的存储顺序。是大端还是小端主要取决于CPU,而与操作系统和编译器无关!
大端模式:数据的高字节存储在内存的低地址,低字节存储在内存的高地址;
小端模式:数据的高字节存储在内存的高地址,低字节存储在内存的低地址。
我一般记小端:低放低,高放高。
2、如何编程判断大小端?
(1)思路:大数据类型给小数据类型赋值的时候会发生截断的现象,也就是说,赋值时会将低地址的数据截断赋值给小数据类型。
#include<stdio.h>
int main(void) {
short a = 0x0102;
char b = 0;
b = a; /*将发生截断,低地址的数据会赋值给字符型变量*/
if (b == 0x2)
printf("Little-Endian\n");
else
printf("Big-Endian\n");
return 0;
}
(2)思路:利用union联合体的成员共享存储单元的特点去判断
#include<stdio.h>
int main(void) {
union {
short a;
char b;
}u;
u.a = 0x0102;
if (u.b == 0x02)
printf("Little-Endian\n");
else
printf("Big-Endian\n");
return 0;
}