一、看似可以实际不行的测试大小端的方法
- 位与的方式不能测试大小端模式
- 位与运算是编译器提供的计算,这个运算是高于内存层次的,位与运算在二进制层次具有可移植性,位于一定是高字节位与低字节,与二进制的存储方式无关。
#include <stdio.h>
int main(void)
{
int a=1;
int b=a&0xff;
printf("b=%d.\n,b"); //不能测试机器的大小端模式
return 0;
}
- 移位方式不能测试大小端模式
- 因为c语言对这些运算符的级别高于二进制层次,右移运算永远是将低字节移出。
#include <stdio.h>
int main(void)
{
int a,b;
a=1;
b=a>>1;
printf("b=%d.\n,b"); //不能测试大小端模式
return 0;
}
#include <stdio.h>
int main(void)
{
int a;
char b;
a=1;
b=(char*)a;
printf("b=%d.\n,b"); //不能测试大小端模式
return 0;
}
二、通信系统中的大小端(数组的大小端)
- 比如要通过串口发送地址0x2345678给接收方,但因为串口本身的限制,只能以字节为单位发送,所以需要发送4次;接收方分4次接收。
- 通信双方要有一个默契,先发的字节是高位还是低位。
- 一般来说先发低字节叫小端,先发高字节叫大端。
- 在通信协议里面会明确告诉你先发的是高字节,还是低字节。
- 在通信协议中大小端是非常重要的,使用通信协议,还是自己定义通信协议,一定要标明大小端问题。