大小端模式

什么是大小端模式
(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("小端模式.\n");
26     }       
27     else
28     {
29         printf("大端模式.\n");
30     }
31 }

 

posted @ 2019-10-22 15:43  志瞳道合  阅读(723)  评论(0编辑  收藏  举报