串口无精度损失传输float类型数据

在上位机和底层通信时,一般传输的类型是定点整型数,有时会遇到传输浮点数的情况,一般处理方式是将浮点数放大几百几千倍,然后舍去剩余的小数部分,接收端接受到整数后再等比例缩小还原原数据即可。这种做法第一要考虑放大后数据的范围不可以超出定点数的表示区间,另外传输过程中丢失了部分精度,在固定小数位数的场合比较适用,高精度传输的时候就会失效。
下面介绍一种无精度损失传输浮点数的方法:
发送端使用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数据类型也可以借鉴该思路传输和还原。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值