0. 问题引入
若定义 : int a = 1; 我们知道 a 在内存存储时 应该为 0x 00 00 00 01,可是看内存里存的是 0x 01 00 00 00,这就是大小端存储的问题。
1.什么是大小端存储
高字节和低字节:
高地址和低地址:
大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中。
小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中。
2 如何测试机器是大端模式还是小端模式
1,利用指针来测试
1 #include <stdio.h> 2 3 int main() 4 { 5 int a = 1; 6 char *p = (char*)&a; // 用char型指针访问第一个字节的内容 7 8 if (*p == 1) 9 { 10 printf("小端"); 11 } 12 else 13 { 14 printf("大端"); 15 } 16 return 0; 17 }
2,利用联合体的性质
1 #include <stdio.h> 2 int check_system() 3 { 4 union Un //联合体共用一块内存 5 { 6 char c; 7 int i; 8 }u; 9 u.i = 1; // 此时存入一个int型的值 10 return u.c; // 只读取一个字节 如果是 1 ,为小端,0为大端。 11 } 12 int main() 13 { 14 int a = check_system(); 15 if (a == 1) 16 { 17 printf("小端"); 18 } 19 else 20 { 21 printf("大端"); 22 } 23 return 0; 24 }