欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

串口通信实现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