罗的密欧
级别: 论坛先锋
精华主题: 0
发帖数量: 126 个
工控威望: 1207 点
下载积分: 7712 分
在线时间: 105(小时)
注册时间: 2022-07-22
最后登录: 2024-11-15
查看罗的密欧的 主题 / 回贴
楼主  发表于: 2024-05-21 09:03
有没有大佬帮忙的,之前同事弄了iee754,32位单精度16进制转换十进制浮点,但是离职了。下面分享一下他编写的,给大佬们看看
if check == 9 and response[0]==0x02  and response[2]==0x04 then
ma=response[5]
mb=response[6]
ma=ma<<8
ma=ma+mb
output=ma


mc=response[3]
mc=mc>>4
mc=mc+1
if mc-8>0 then
mc=mc-8
bin[16]=1
end if
if mc-4>0 then
mc=mc-4
bin[17]=1
end if
if mc-2>0 then
mc=mc-2
bin[18]=1
end if
if mc-1>0 then
mc=mc-1
bin[19]=1
end if


//IEEE754
output=output+1
if output-32768>0 then
output=output-32768
bin[0]=1
end if
if output-16384>0 then
output=output-16384
bin[1]=1
end if
if output-8192>0 then
output=output-8192
bin[2]=1
end if
if output-4096>0 then
output=output-4096
bin[3]=1
end if
if output-2048>0 then
output=output-2048
bin[4]=1
end if
if output-1024>0 then
output=output-1024
bin[5]=1
end if
if output-512>0 then
output=output-512
bin[6]=1
end if
if output-256>0 then
output=output-256
bin[7]=1
end if
if output-128>0 then
output=output-128
bin[8]=1
end if
if output-64>0 then
output=output-64
bin[9]=1
end if
if output-32>0 then
output=output-32
bin[10]=1
end if
if output-16>0 then
output=output-16
bin[11]=1
end if
if output-8>0 then
output=output-8
bin[12]=1
end if
if output-4>0 then
output=output-4
bin[13]=1
end if
if output-2>0 then
output=output-2
bin[14]=1
end if
if output-1>0 then
output=output-1
bin[15]=1
end if

ieee=bin[1]*128+bin[2]*64+bin[3]*32+bin[4]*16+bin[5]*8+bin[6]*4+bin[7]*2+bin[8]
ieee=ieee-127

select case ieee
case 0
ieee2=1
break
case 1
ieee2=2+bin[9]
break
case 2
ieee2=4+bin[9]*2+bin[10]
break
case 3
ieee2=8+bin[9]*4+bin[10]*2+bin[11]
break
case 4
ieee2=16+bin[9]*8+bin[10]*4+bin[11]*2+bin[12]
break
case 5
ieee2=32+bin[9]*16+bin[10]*8+bin[11]*4+bin[12]*2+bin[13]
break
case 6
ieee2=64+bin[9]*32+bin[10]*16+bin[11]*8+bin[12]*4+bin[13]*2+bin[14]
break
case 7
ieee2=128+bin[9]*64+bin[10]*32+bin[11]*16+bin[12]*8+bin[13]*4+bin[14]*2+bin[15]
break
case 8
ieee2=256+bin[9]*128+bin[10]*64+bin[11]*32+bin[12]*16+bin[13]*8+bin[14]*4+bin[15]*2+bin[16]
break
case 9
ieee2=512+bin[9]*256+bin[10]*128+bin[11]*64+bin[12]*32+bin[13]*16+bin[14]*8+bin[15]*4+bin[16]*2+bin[17]
break
case 10
ieee2=1024+bin[9]*512+bin[10]*256+bin[11]*128+bin[12]*64+bin[13]*32+bin[14]*16+bin[15]*8+bin[16]*4+bin[17]*2+bin[18]
break
case 11
ieee2=2048+bin[9]*1024+bin[10]*512+bin[11]*256+bin[12]*128+bin[13]*64+bin[14]*32+bin[15]*16+bin[16]*8+bin[17]*4+bin[18]*2+bin[19]
break
end select
//ieee754


if bin[0]==0 then//负数时不输出
//SetData(output, "Local HMI", LW, 50, 1)
//SetData(ma, "Local HMI", LW, 100, 1)
//SetData(ieee2, "Local HMI", LW, 50, 1)
//SetData(ieee2, "Local HMI", LW, 100, 1)
ma=ieee2
end if

end if
天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只叹江湖几人回。
罗的密欧
级别: 论坛先锋
精华主题: 0
发帖数量: 126 个
工控威望: 1207 点
下载积分: 7712 分
在线时间: 105(小时)
注册时间: 2022-07-22
最后登录: 2024-11-15
查看罗的密欧的 主题 / 回贴
1楼  发表于: 2024-05-21 11:13
是的,但是我不是正经学编程的,对这个转换不太理解。十进制转十六进制这种简单的就可以
引用
引用第1楼ren1823于2024-05-21 09:23发表的  :
浮点数、10进制、16进制数底层都是相同的二进制数,只是显示方式不同而已。上面的程序就是把数的二进制格式的位一个个拆出来然后再按照二进制的位组合成10进制数
天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只叹江湖几人回。
罗的密欧
级别: 论坛先锋
精华主题: 0
发帖数量: 126 个
工控威望: 1207 点
下载积分: 7712 分
在线时间: 105(小时)
注册时间: 2022-07-22
最后登录: 2024-11-15
查看罗的密欧的 主题 / 回贴
2楼  发表于: 2024-05-21 16:02
额,解决办法现在不打算研究这个困难的办法,我就弄成输入16进制。数据转换的让人找手机网页转换
天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

提剑跨骑挥鬼雨,白骨如山鸟惊飞。尘事如潮人如水,只叹江湖几人回。