什么是大小端模式
(1)大端模式(big endian)和小端模式(little endian)
(2)在计算机通信发展起来后,遇到一个问题就是:在串口通信中,一次只能发送一个字节。如果要发送一个int类型的数据就会有
一个问题。int类型有四个字节,我是按照byte0 byte1 byte2 byte3这样的方式发送,还是按照byte3 byte2 byte1 byte0这样的顺序
发送。规则就是发送方和接收方必须按照同样的字节顺序来通信,否则就会出现错误。
(3)现在所说的大小端模式,更多的是指计算机存储系统的大小端。因为存储系统是32位的,但是数据仍然是按照字节为单位的。
于是乎一个32位的二进制在内存存储时有2种分布方式:高字节对应低地址(大端模式)、高字节对应高地址(小端模式)
(4)所以我们在写代码时,当不知道当前环境是用大端模式还是小端模式的时候,就需要用代码来检测当前系统的大小端。
1 #include <stdio.h> 2 //共用体中很重要的一点:a和b都是从u1的低地址开始的。 3 union myunion 4 { 5 int a; 6 char b; 7 }; 8 int is_little_endian(void) 9 { 10 union myunion u1; 11 u1.a = 1; //地址0的那个字节,小端模式会放1,大端模式会放0 12 return u1.b; 13 } 14 int is_little_endian2(void) 15 { 16 int a = 1; 17 char b = *(char *)(&a); //指针方式是共用体方式的本质 18 return b; 19 } 20 int main(void) 21 { 22 int i = is_little_endian(); 23 if(i == 1) 24 { 25 printf("小端模式. "); 26 } 27 else 28 { 29 printf("大端模式. "); 30 } 31 }