羅的密歐
級別: 論壇先鋒
|
有沒有大佬幫忙的,之前同事弄了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 |
|
---|---|---|
|
ren1823
級別: 工控俠客
|
浮點數、10進制、16進制數底層都是相同的二進制數,只是顯示方式不同而已。上面的程序就是把數的二進制格式的位一個個拆出來然后再按照二進制的位組合成10進制數 |
---|---|
|
羅的密歐
級別: 論壇先鋒
|
是的,但是我不是正經學編程的,對這個轉換不太理解。十進制轉十六進制這種簡單的就可以
|
|
---|---|---|
|