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