串口通讯有时会收到的数据是浮点型。我们需要将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);
}