在上位机和底层通信时,一般传输的类型是定点整型数,有时会遇到传输浮点数的情况,一般处理方式是将浮点数放大几百几千倍,然后舍去剩余的小数部分,接收端接受到整数后再等比例缩小还原原数据即可。这种做法第一要考虑放大后数据的范围不可以超出定点数的表示区间,另外传输过程中丢失了部分精度,在固定小数位数的场合比较适用,高精度传输的时候就会失效。
下面介绍一种无精度损失传输浮点数的方法:
发送端使用uint8_t类型的buff存储float数据中的字节数值,buff长度应该为sizeof(float),发送buff数据
接收端使用同样长度的uint8_t类型接收buff接收数据,然后将数据拷贝到接收的float数据即可
例子代码:
float f1 = 3.14f; //模拟发送数据
uint8_t buff1[4] = { 0 };
memcpy(buff1, &f1, 4); //将发送数据拷贝到buff中
printf("f1 is %f\n", f1);
/**************接收端***************/
float f2 = 0.0f; //存储接收数据
memcpy(&f2, buff1, 4); //将接收的buff数据转换成float类型
printf("f2 is %f\n", f2);
这种方法不仅可以传输float类型,double类型也是同样的原理,另外用户自定义的struct数据类型也可以借鉴该思路传输和还原。