请问利用qt的QSerialPort进行串口通信怎么传输浮点数给下位机?

l7890 2017-12-15 09:37:40

如图所示,10对应0x41 20;11对应0x41 30;0.24对应0x3E 75 C2 8F;0.18对应0x3E 38 51 EC;这是通过什么规则转换来的?利用qt的QSerialPort进行串口通信该怎样写数据转换程序,才能将数据以如图这样的格式传给下位机?
...全文
1245 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyz007 2018-01-05
  • 打赏
  • 举报
回复
这里有一个16进制转换的计算器,可以用来验证你的程序,需要注意的是这个计算器里面将高位写在后面了! 链接:https://pan.baidu.com/s/1qYifpaG 密码:5kjj
lyz007 2018-01-05
  • 打赏
  • 举报
回复
0.18对应0x3E 38 51 EC,规律 0x3E 38 51 EC——是0.18的四位16进制表示方式, 具体换算方法如下: 6进制浮点数与十进制的转化 对于大小为32-bit的浮点数(32-bit为单精度,64-bit浮点数为双精度,80-bit为扩展精度浮点数), 1、其第31 bit为符号位,为0则表示正数,反之为复数,其读数值用s表示; 2、第30~23 bit为幂数,其读数值用e表示; 3、第22~0 bit共23 bit作为系数,视为二进制纯小数,假定该小数的十进制值为x; 则按照规定,该浮点数的值用十进制表示为: = (-1)^s * (1 + x) * 2^(e - 127) 对于49 E4 8E 68来说, 1、其第31 bit为0,即s = 0 2、第30~23 bit依次为100 1001 1,读成十进制就是147,即e = 147。 3、第22~0 bit依次为110 0100 1000 1110 0110 1000,也就是二进制的纯小数0.110 0100 1000 1110 0110 1000,其十进制形式为0.78559589385986328125,即x = 0.78559589385986328125。 这样,该浮点数的十进制表示 = (-1)^s * (1 + x) * 2^(e - 127) = (-1)^0 * (1+ 0.78559589385986328125) * 2^(147-127) = 1872333 可以用windows自带的计算器算一下。
zjh872354984 2017-12-25
  • 打赏
  • 举报
回复
楼主弄出来了吗,能分享一下吗,最近也要学习,没思路
代码运输员 2017-12-25
  • 打赏
  • 举报
回复
一般通讯接收字节码后都保存成unsigned char数组,根据自己的需要将几个字节转换为你要的数据.
Clong玩Linux 2017-12-18
  • 打赏
  • 举报
回复
把浮点转化整数的形式,发送,那边解析的时候解析成浮点数就可以了
huo5896324 2017-12-15
  • 打赏
  • 举报
回复
把0.18 这个浮点数memcpy到一个整数里 整数的大小就是 0x3E 38 51 EC然后你再按字节拆分一下 填充进去 就行了
走好每一步 2017-12-15
  • 打赏
  • 举报
回复
浮点数也是二进制流
Acuity. 2017-12-15
  • 打赏
  • 举报
回复
直接发送,浮点数发送浮点数接收。

extern send(char *buff,int size);
extern recv(char *buff,int size);
float send_f,recv_f;

send((char*)&send_f,4);
recv((char*)&recv_f),4);

16,173

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧