和利时MACSV6.5.3中4byte数据合并转换为单精度浮点数float
和利时MACSV6.5.3中4byte数据合并转换为单精度浮点数float
代码截图
验证
完整可导入代码
复制到记事本中,保存为xml文件,在和利时M6 AutoThink中导入
<?xml version="1.0" encoding="ISO-8859-1"?> <pou> <path><![CDATA[USER]]></path> <name>IEEE754</name> <secondName></secondName> <description>4Byte数据转换为单精度浮点数</description> <flags>2048</flags> <auto-sort>0</auto-sort> <exporttime>2023-06-17 11:40:43</exporttime> <amendtime>2023-06-17 11:38:00</amendtime> <downloadtime></downloadtime> <modifier>AAAA</modifier> <PouPaperSize>A4</PouPaperSize> <PouPrintType>1</PouPrintType> <PouExcuteOrder>0</PouExcuteOrder> <interface> <![CDATA[FUNCTION IEEE754 : REAL VAR S1(2112): INT := 0; E1(2112): INT := 0; F1(2112): DWORD := 0; END_VAR VAR_INPUT IB0(2113): BYTE := 0; IB1(2113): BYTE := 0; IB2(2113): BYTE := 0; IB3(2113): BYTE := 0; END_VAR VAR_IN_OUT END_VAR]]> </interface> <st> <body> <![CDATA[(* 2023年6月17日 11:36 周六 注意:当4个byte数据均为0时,输出是一个非常小的数值,而不是0 原因在与 EXPT(2, INT_TO_REAL(E1 - 127)) 不为0,该问题暂未解决 *) (*--------数据位传输--------*); F1 := PUTBIT(F1, 0, EXTRACT(IB0,0)); F1 := PUTBIT(F1, 1, EXTRACT(IB0,1)); F1 := PUTBIT(F1, 2, EXTRACT(IB0,2)); F1 := PUTBIT(F1, 3, EXTRACT(IB0,3)); F1 := PUTBIT(F1, 4, EXTRACT(IB0,4)); F1 := PUTBIT(F1, 5, EXTRACT(IB0,5)); F1 := PUTBIT(F1, 6, EXTRACT(IB0,6)); F1 := PUTBIT(F1, 7, EXTRACT(IB0,7)); F1 := PUTBIT(F1, 8, EXTRACT(IB1,0)); F1 := PUTBIT(F1, 9, EXTRACT(IB1,1)); F1 := PUTBIT(F1, 10, EXTRACT(IB1,2)); F1 := PUTBIT(F1, 11, EXTRACT(IB1,3)); F1 := PUTBIT(F1, 12, EXTRACT(IB1,4)); F1 := PUTBIT(F1, 13, EXTRACT(IB1,5)); F1 := PUTBIT(F1, 14, EXTRACT(IB1,6)); F1 := PUTBIT(F1, 15, EXTRACT(IB1,7)); F1 := PUTBIT(F1, 16, EXTRACT(IB2,0)); F1 := PUTBIT(F1, 17, EXTRACT(IB2,1)); F1 := PUTBIT(F1, 18, EXTRACT(IB2,2)); F1 := PUTBIT(F1, 19, EXTRACT(IB2,3)); F1 := PUTBIT(F1, 20, EXTRACT(IB2,4)); F1 := PUTBIT(F1, 21, EXTRACT(IB2,5)); F1 := PUTBIT(F1, 22, EXTRACT(IB2,6)); (*--------指数位传输--------*) E1 := PUTBIT(E1, 0, EXTRACT(IB2,7)); E1 := PUTBIT(E1, 1, EXTRACT(IB3,0)); E1 := PUTBIT(E1, 2, EXTRACT(IB3,1)); E1 := PUTBIT(E1, 3, EXTRACT(IB3,2)); E1 := PUTBIT(E1, 4, EXTRACT(IB3,3)); E1 := PUTBIT(E1, 5, EXTRACT(IB3,4)); E1 := PUTBIT(E1, 6, EXTRACT(IB3,5)); E1 := PUTBIT(E1, 7, EXTRACT(IB3,6)); (*--------符号位传输--------*) S1 := PUTBIT(S1, 0, EXTRACT(IB3,7)); IEEE754 := EXPT(-1, INT_TO_REAL(S1)) * EXPT(2, INT_TO_REAL(E1 - 127)) * ( DWORD_TO_REAL(F1) * (EXPT(2, -23)) + 1);]]> </body> </st> </pou>
__EOF__
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员