串口通讯中接收和发送float类型数据

使用共用体来解决数据的编解码问题,共用体可以使不同的数据类型来共享相同的地址空间。

#include <stdio.h>
#include <string.h>

int main(void)
{

     union result
     {
         float d;
         unsigned char data[4];
     }r1,r2;
// 特别需要注意的是在单片机中int float double 类型的字长和PC机中是不一样的,需要注意
     r1.d=7.215487 23131;
     r2.data[0]=r1.data[0];
     r2.data[1]=r1.data[1];
     r2.data[2]=r1.data[2];
     r2.data[3]=r1.data[3];
    printf("byte0= %d byte1= %d byte2= %d byte3= %d r1=%f r2=%f \n",r1.data[0],r1.data[1],r1.data[2],r1.data[3],r1.d,r2.d);
   getchar();
   getchar();
   return 0;

}

使用上述的方法,如果需要在PC与MCU之间通过串口来传送浮点数double/float就可以了,两边都使用共用体,一次传输一个BYTE,然后依次放入char型数组中,使用的时候直接使用对应的浮点数就可以了。

好的,在逐飞科技提供的无线串口模块中,发送 `float` 类型数据涉及到将浮点数转换成字节流再通过串口发送出去的过程。 ### 具体步骤如下: #### 1. 数据准备 首先准备好你要发送float数据。例如: ```c++ float data = 3.14f; ``` #### 2. 转换为字节数组 由于串行通信通常是以字节(8位)为单位传输数据的,因此需要把float类型的变量拆解成一个个字节。可以借助于联合体(union)或者直接指针操作完成这种转化。 使用联合体的方式会更安全一些,示例代码如下: ```cpp union FloatToBytes { float fValue; // 浮点数值 uint8_t bytes[4]; // 对应浮点数的二进制表示形式 }ftb; ftb.fValue = data; // 将要发送的值赋给联合体成员 // 现在 ftb.bytes[] 数组就包含了这个浮点数对应的四个字节了。 ``` 这里我们创建了一个名为 `FloatToBytes` 的联合体结构体,并将其第一个元素设置为我们想要传送的那个 `data` 变量;然后该变量会被解释为接下来连续存放着它的那几个字节。 #### 3. 发送数据 最后一步就是把这些字节依次传送给无线串口设备了。假设你已经初始化好了一个用于通讯的对象叫做 `wirelessSerial`,那么你可以这样做: ```cpp for(int i=0;i<4;++i){ wirelessSerial.write(ftb.bytes[i]); } ``` 上面的例子只是简单地演示如何处理单个float类型数据。如果需要传递更多复杂的信息,建议考虑打包整个消息包一起发送过去——比如先发长度信息、紧接着是实际内容等标准做法。 --- 另外需要注意的是接收端也要按照同样的规则对接收到的数据进行解析才能正确还原出原始的浮点数。同时考虑到网络延迟等因素可能会导致接收到的消息顺序错乱的问题,所以在真实环境中往往还需要加入校验机制以及保证消息完整性的一些措施. --
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值