最近在,测试一个电子陀螺仪.其中,加速度数据是以32位浮点型数据分四个字节小端的形式从传感器内部发射出来.
当我用串口读出4个字节后却发现不知道该如何转化成浮点型数据.后来,在网上搜索到了一个新的办法,使用联合进行转化,发现挺好用的,所以总结如下:
首先是定义和声明一个联合:
typedef union
{
unsigned char a[4];
float value;
}FLAOT_UNION;
FLAOT_UNION b;
然后利用联合不同成员之间共享内存的原理,需要什么类型,使用什么类型,直接转换.
for(t=19;t<31;t+=4)
{
b.a[0]=(USART_RX_BUF3[t+3]);//把接收到的字节按照大段模式直接赋值给字节变量成员
b.a[1]=(USART_RX_BUF3[t+2]);
b.a[2]=(USART_RX_BUF3[t+1]);
b.a[3]=(USART_RX_BUF3[t]);
acc[acc_count++]= b.value; //直接把浮点型的成员复制给浮点数组
}
这样处理数据的类型转换,避免了繁琐的计算,的确挺不错的.