串口通信实现Int或float类型数据传输的方法
程序员文章站
2024-03-18 17:49:52
...
方法:发送方拆分数据为多个字节,接收方再合并
- 串口通信程序中发送和接受数据以字节为单位,将int或float类型的数据拆成单个字节存放到发送字符数组中,然后接收方按照大小端模式将其重新合并为int或float类型的数据
实现:通过指针来获取单个字节,主要是指针间的强制类型转换
#include<stdio.h>
//以float为例
int main()
{
float send = -5.2;
char data_byte[4];
//获取原数据的指针并将其强制转换为char*
char* tmp = (char*)&send;
//通过tmp指针取出每个字节,tmp[i]等效为*(tmp+1)
data_byte[0] = tmp[0];
data_byte[1] = tmp[1];
data_byte[2] = tmp[2];
data_byte[3] = tmp[3];
//模拟接收方,x86或者ARM架构为小端模式存储数据
float receive;
receive = *((float*)data_byte);
printf("%f\n",receive);
return 0;
}
注意:
- 大端模式:高位字节存在低地址区
- 小端模式:高位字节存在高地址区
- 一般x86或者ARM架构为小端模式存储:
- char类型在x86 Linux和ARM Linux编译器下的区别:前者一般默认char 为有符号型,后者默认char为无符号型的。
- ARM Linux编译器下,下面语句执行后,data为0
float a=-5.2; //a小于0
signed char data = (unsigned char)a;//执行完成之后data为0,当a>0时,可以得到正数,需要改为:(signed char)a