24bits 16進位轉10進位 的問題

因為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不行?轉出來的值不都一樣嗎?

hex to dec number.vi

差別在於當使用32bits去轉換24bits的hex code時,請注意以下的值


FF77C8

FE712D

FF373B

FFB10C

FFEE88

在接收的判斷當中會被判斷成正數,而不會以2’的補數換算回負數

-34872

-102100

-20210

-51397

-4472

而會變成

16742344

16675117

16725819

16757004

16772744

這個程式給您參考看看~是否合用?!

24bitToNumber.vi

 

這個是我自己寫的判斷程式

概念是應用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