将四字节16进制数转化为浮点数
近期机缘凑巧帮了朋友一个忙,在Modbus协议下,将采集到的十六进数转化为浮点数,有几种解决方法,分享给需要的朋友,令其少走一些弯路。
众所周知,Modbus通信协议是一个通用的广泛使用的协议,比如说该仪表的通讯格式定义如下:
发送命令:
例: 命令:01040000000271CB(十六进制数)
响应:01040142C3999AF5FB(十六进制数)
本命令读取地址为0401仪表的测量值:
相应表明读取的测量值为42C3999A(浮点数为97.8)
方法1:
这是我之前从网上找到的方法,可以看到求解过程比较繁琐。
第一步:将十六进制数值转变为正常显示,不按照字节来区别的字符串;
第二步:去除前面和后面用不到的地址,校验位等字符串;
第三步:将字符串的高位,低位分别拆分开来,转变为数值,最后强制转化为浮点数。
方法2:
如上是我的方法,理解透彻后,我自己的方法就比较简单了:
第一步:十六进制是按照2个数字8个字节为一组处理,那我就去掉前三组和后两组无用信息,得到有用数据信息;
第二步:直接将十六进制字符串强制转化为浮点数,注意下图,勾选0类型为单精度:
|