大端格式(big endian / BE):数据在内存中存储时,先存储高位部分到低地址,再存储低位部分到高地址
小端格式(little endian /LE):数据在内存中存储时,先存储低位部分到低地址,再存储高位部分到高地址
需要知道:PowerPC系列采用big endian方式存储数据,而x86系列则采用littleendian方式存储数据
为了检测自己系统是大端格式还是小端格式,可以用一下代码测试:
int is_big_endian(void)
{
union {
uint32_t i;
char c[4];
} e = {0x10000000};
return e.c[0];
}
在main中测试:
int main()
{
printf("System is %s -endian.\n", is_big_endian() ? "big" : "little");
return 0;
}
对报文中“前低后高”报文的处理可参考以下例子:
int main()
{
unsigned int orignalNum = 0x4048F5C2;//3.14
float num = *(float *)(&orignalNum);
printf("%f\n",num); //已知4字节报文可以按上述解析
//下面例子则是将前低后高的报文放入数组,由数组内存转换成float值
float b;
unsigned char Fvalue[4] = {0xc2,0xf5,0x48,0x40} ;//注意,这里与0x4048F5C2恰恰高地位对调
memcpy(&b,Fvalue,sizeof(Fvalue)); //按照内存地址的低位到高位拷贝
printf("b =%f \n",b);
测试结果:
3.140000
b =3.140000