通讯浮点数据处理,数据转换,hex转float

发布于:2022-12-30 ⋅ 阅读:(688) ⋅ 点赞:(0)

串口通讯有时会收到的数据是浮点型。我们需要将hex数据改成浮点。
我们假设收到的数据是a[],测试下将hex转成float。
也可以在线hex转float找些数据来测试。

关键处理就是f = *(float*)a1,
(float*)a1表示这是个浮点数地址,前面加*,重新转为数据。
#include <stdio.h>

int main()
{
    float f;
	//11 22 33 44 大端模式应该是  716.5322875976562 
	//为了适应不同的字节序分别做了a1-a4
	char a1[4] = {0x11, 0x22, 0x33, 0x44 };		
	char a2[4] = {0x33, 0x44, 0x11, 0x22 };		
	char a3[4] = {0x22, 0x11, 0x44, 0x33 };		
	char a4[4] = {0x44, 0x33, 0x22, 0x11 };		
	
	f = *(float*)a1;	
	printf("f:%f \r\n",f);
	
	f = *(float*)a2;	
	printf("f:%f \r\n",f);
	
	f = *(float*)a3;	
	printf("f:%f \r\n",f);
	
	f = *(float*)a4;	
	printf("f:%f \r\n",f);

   return 0;
}

可以在菜鸟在线工具上做下测试

网络字节序转主机字节序,参考了LWIP里的代码, lwip_v1.3.2\src\core\ipv4\inet.c line258

uint32_t htonl(uint32_t n)
{
  return ((n & 0xff) << 24) |
    ((n & 0xff00) << 8) |
    ((n & 0xff0000UL) >> 8) |
    ((n & 0xff000000UL) >> 24);
}

网站公告

今日签到

点亮在社区的每一天
去签到