在一些串行通信中,一次只能发送一个字节。发送一个int类型有4个字节,是按照
byte0 byte1 byte2 byte3 还是byte3 byte2 byte1 byte0的顺序发送呢。

这是通信中的大小端,
现在我们讲的大小端,更多的是指计算机存储系统中的大小端。数据按照字节为单位存放,于是分为两种分布方式:
高字节对应低地址(大端模式)

高字节对应高地址(小端模式)

大小端没有对错优劣,但是要求存储时和读取时必须按照同样的大小端模式来进行,否则会出错哦。c51单片机是用大端,Arm大部分是用小端。
看一到经典的笔试题。
用c语言写一个函数来测试当前机器的大小端模式
方法1.用联合体
先说说联合体的特点
#include <stdio.h>
union myunion
{
int a;
char b; /* data */
};
int is_litte_endian(void)
{
union myunion ul;
ul.a=1;
return ul.b;
}
int main(void)
{
int i=is_litte_endian();
if(i==1)
{
printf("小端模式");
}
else{
printf("大端模式");
}
return 0;
}

方法2.利用指针。
#include <stdio.h>
int is_little_endian2(void)
{int a=1;
char b = *((char *) (&a)) ;
//指针方式其实就是共用体的本质,取a的地址强制类型转换为char,再看看char的地址指向的是1还是0
return b;
}
int main (void){
int i = is_little_endian2() ;
if (1== i)
printf("小端模式\n");
else
printf("大端模式\n");
return 0;
}

最后再说说在通信协议中的大小端,先发低字节叫小端,先发高字节是大端。
原文:https://www.cnblogs.com/wulianwangaxing/p/15027938.html