因為LabVIEW裡面的預設值為16bits或是32bits,
所以當我有如下列24bits的字串時,無法正確轉成10進位的編碼,
請問各位先進該怎麼寫才好呢?
002773
03030D
050565
FF77C8
FE712D
FF373B
FFB10C
FFEE88
002B8C
00617B
00A732
00F847
016293
02041B
02B884
035B51
03B35B
039F43
02DC65
以上是16進位的編碼
10099
197389
329061
-34870
-102097
-20210
-51395
-4470
11148
24955
42802
63559
90771
132123
178308
219985
242523
237379
187493
這是我手算的10進位結果
caleb38437.052962963
差別在於當使用32bits去轉換24bits的hex code時,請注意以下的值
FF77C8
FE712D
FF373B
FFB10C
FFEE88
在接收的判斷當中會被判斷成正數,而不會以2’的補數換算回負數
-34872
-102100
-20210
-51397
-4472
而會變成
16742344
16675117
16725819
16757004
16772744
這個是我自己寫的判斷程式
概念是應用2的補數的概念
因為24bits必定有12bits是正數,另一半則是負數
所以0~7FFFFF是正數,800000~FFFFFF是負數
既然我不能以16bits的方式判斷正負數,
所以我就判斷超過7FFFFF的字串補上FF
這樣以32bits的方式利用LabVIEW內建的hex to number轉成負數
其實還是有點投機啦
24bits_hex_to_number.vi
所以還是希望其他的強者能不吝指教
寫出更好的程式給小弟參考
小弟用的是LV6.1,開不了各位大大的檔案,是否請大大把程式貼出來呢
謝謝
像這樣也可以,hex字串先轉U32數值,再轉 I32數值,
接著判別有無大於等於 0x800000 ,條件成立則將原值減去 0x7FFFFF
再轉負值輸出,不成立則輸出原值

提供原始碼 hex_string(24bit) to dec_numeric.vi
deomaxwell38479.4672685185