LabVIEW編程實例:整數類型數值的高

在上位機軟件與底層硬件通信時,經常遇到將一個整數數值按高、低位分解成不同的兩部分數值的情況,如將U32類型的數值0x12345678拆分為兩部分,即高16位0x1234,低16位0x5678,兩部分代表不同的含義。或者反過來的情況,即將兩個16位數值0x1234和0x5678拼接成一個數值32位數值0x12345678。

那麼,在LabVIEW中有哪些方法可以實現將一個整數數值的按照高、低位分解成兩部分或者反過來進行拼接呢?下面通過一個例子進行說明。

實例說明

這個例子的功能是將一個U32類型的整型數字按照不同的方法分解為高低兩部分U16類型的數值,並且再將這兩個U16類型的數值拼接成原始的U32型數值。軟件運行主界面如下圖所示:

LabVIEW編程實例:整數類型數值的高/低位分解與拼接方法


這個例子中提供了五種方法,在主界面可通過“計算方式”單選框進行選擇,分別為直接函數法、數據移位法、求商和餘數法、強制轉換法(數組)和強制轉換法(簇),選擇完計算方式後,點擊計算按鈕可顯示對應的拆分及拼接結果。下面分別介紹這五種方法的具體程序框圖實現過程。

直接函數法實現

這種方法直接利用LabVIEW軟件中提供的“拆分數字”和“整數拼接”兩個函數實現,程序框圖代碼如下圖所示:

LabVIEW編程實例:整數類型數值的高/低位分解與拼接方法


說明:這兒的計算過程放在了“計算”按鈕的值改變事件中實現,在該事件中,根據“計算方式”選擇的不同,在選擇結構裡面實現相應的計算。

數據移位法實現

這種方法利用“邏輯移位”、“與”及“或”函數配合實現,程序框圖代碼如下圖所示:

LabVIEW編程實例:整數類型數值的高/低位分解與拼接方法


當拆分時,將原始U32數值先右移16位得到高16位數值,將原始數值與0xFFFF相與後,得到低16位數值。

當拼接時,將高16位數值左移16位後再與低16位數值相或運算,就可得到原始的U32數值。

求商和餘數法實現

這種方法程序框圖代碼如下圖所示:

LabVIEW編程實例:整數類型數值的高/低位分解與拼接方法


其拆分原理是利用“商與餘數”函數將原始數值除以0x10000(即2的16次方),相當於右移16位,其整數部分即為高16位數值,其餘數部分即為低16位數值

其拼接原理是拆分的逆過程,將高16位值乘以0x10000然後與低16位相加即可得到原始的U32數值。

實際上這種方法在本質上同上種數據移位的方法是相同的。

強制轉換法(數組)實現

這種方法利用“強制類型轉換”函數將原始U32類型數值轉換為一維數組,然後進行拆分與拼接的實現,程序框圖代碼如下圖所示:

LabVIEW編程實例:整數類型數值的高/低位分解與拼接方法


當拆分時,將原始U32數值強制轉換為U16類型的一維數組,那麼數組的前兩個元素就分別為高16位數值和低16位數值。

當拼接時,將由高16位數值和低16位數值組成的一維數組強制轉換為U32類型的一個標量數值,該數值即為原始的U32數值。

強制轉換法(簇)實現

這種方法利用“強制類型轉換”函數將原始數值轉換為簇類型(此處簇相當於C語言的結構體類型),然後進行拆分與拼接的實現,程序框圖代碼如下圖所示:

LabVIEW編程實例:整數類型數值的高/低位分解與拼接方法


這兒創建一個包含兩個U16類型元素的簇,藉助於該簇完成拆分與拼接功能。

對於都包含兩個U16類型元素的一維數組和簇,由於在內存中數據的實際存放方式是完全相同的,因此,在本質上這種方法與上種方法強制轉換為一維數組是相同的。

總結

這兒介紹了五種將整數數值按高低位分解及拼接的方法。例子中是以U32類型的數值進行說明的,當然,對於其它類型如U16、U64等類型的數值其處理方法與是適用的。

如果這篇文章對你有用的話,請關注+轉發+收藏+點贊吧。


分享到:


相關文章: