IEEE 标准的 32 位浮点数转换为十进制的计算方法
IEEE 标准的 32 位浮点数转换为十进制的计算方法技术 分类: 通信 | 2008-11-03 作者: weitongguo: EDN China EDN 博客精华文章 作 者: weitongguo 工作中碰到的一个小问题,经过了一番
研究,终于搞明白了,为了以后大家不再挠头,写了这个供 大家参考。其中涉及到 MODTEST 软件 MODBUS 协议 IEEE32 位二进制浮点数与十进制小数转换的方法等内容。 IEEE 标准的 32 位浮点数转换为十进制的计算方法 下面 是用笔记本电脑的 MODTEST 软件在 COM 1 口经 232转 485 转换器转变为 485 口后连接到流量计算机,通过 MODBUS 协议读取到的流量计内部数据,下面通过分析,解释了如何 把十六进制转换为十进制的计算过程。即下面记录里面的十 六进制数据转换为左上角显示的十进制数据。点击看原图 流量计计算机通过 485 端口以 MODBUS 协议把内部 IEEE32 位浮点数传送到 DCS 的数据 经过研究试验, 其数据格式 如下 数据请求依次为:十六进制 从站地址: 01;读
命令:03;数据起始高位地址:0F;数据起始低位地址:A0 ; (0FA0=4000 即地址 44001);数据长度高位: 00;数据长度 低位: 28;( 0028=40 即 40 个地址); CRC 效验码: 46,E2
数 据应答格式: 从站地址: 01;读命令反馈: 03;数据长 度:50;第一个地址:69; C0; 48; A9 ;第二个地址:C5; 00; 48; A2 支持小数点的进制转换器;以下类推,直到最后两位 CRC : E8; 86 第 一个地址: 69;C0;48;A9 是如何换算为 346958 的呢? 流 量计发送的是 IEEE 标准的 32 位浮点数 首先要把 69;
C0;48;A9 进行高低 16 位交换变成: 48;A9 ;69;C0 变
为 32 位二进制数: 01001000 10101001 01101001
11000000 其中最高位为 0,代表是正数 接下来的八 位: 10010001 变成十进制是 145,根据 IEEE 规范应减去 127 得 18,这是小数点右移的位数; 剩下的 23 位是纯二进
制小数即: 0.0101001 01101001 11000000 加 1 后得
1.0101001 01101001 11000000 小数点右移 18 位后得
10101001 01101001 110.00000 变为十进制得 346958
其它地址的 32 位浮点数计算方法同上
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论