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

2020-12-14 編碼那些事

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

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

實例說明

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

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

直接函數法實現

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

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

數據移位法實現

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

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

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

求商和餘數法實現

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

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

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

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

強制轉換法(數組)實現

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

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

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

強制轉換法(簇)實現

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

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

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

總結

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

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

相關焦點

  • LabVIEW編程基礎:以實例學編程之循環結構
    LabVIEW編程基礎:以實例學編程之條件結構精講,LabVIEW編程基礎:以實例學編程之順序結構)中分別講了順序結構與條件結構的編程方法,下面通過具體例子演示循環結構的編程使用方法。下面通過簡單的例子,演示LabVIEW中for循環和while循環編程的方法。基本示例1:計算1-10之間所有整數的和本例要求計算1-10之間所有整數的和。可用for循環,也可用while循環,配合初始值為0的移位寄存器,可以很容易的求得計算結果為55。
  • LabVIEW編程實例:如何求解1000以內的所有素數
    編程思路求解1000以內的所有素數,這個問題可以分解為下面兩個問題:如何判斷一個數是否為素數查找1000以內的所有符合條件的素數對於第一個問題,基本的判斷思路比較簡單:對於一個大於1的正整數x,如果用2到根號下x 之間的所有整數去除,均不能整除,則這樣的x可以判斷為是一個素數。
  • LabVIEW編程實例:如何求解自然常數e
    實例說明自然常數e,是數學中最重要的常數之一,是一個無限不循環小數,也是自然對數函數的底數,其值約為2.71828。編程思路從上面的近似公式可以看出,e的值與n的階乘有關,可將上式分解為兩個步驟:求解n的階乘:n!=1×2×3×......×(n-1)×n;對n!
  • 基於labview的示波器控制設計
    下面就來談談計算機控制示波器的步驟和方法,並利用實例進行分析和講解。本文引用地址:http://www.eepw.com.cn/article/234570.htm1. 系統硬體構架 計算機控制示波器步驟實例(以LAN口控制為例,開發軟體:labview)下面針對計算機如何編程控制示波器的步驟進行詳細的說明。3.1 開發軟體的選取市場上最流行的分析和開發軟體很多,有VC/VC++、VB/VBA、Matlab、Labview、LabWindow CVI等開發軟體,根據個人的愛好和對某個軟體的熟悉程度來選用。
  • Python字符串的拼接
    ,關注我,一同學習簡單易懂的Python編程。字符串拼接由上可見,既可以將字符串賦值為變量相加,也可以直接相加,那麼字符串能不能直接和數值類型數據相加呢?還是通過一個實例來說明,將「一臺洗衣機售價3000元人民幣。」這句話,拆分為三部分,前後各一個字符串,中間的3000作為數值存在,來拼接一下,詳見下圖:
  • LabVIEW的深入探索---LabVIEW中的時間節點函數
    LabVIEW專門提供了時間類型的控制項---時間標識(TIMESTAMP),時間控制項是8.X的新增數據類型,內部用18位整數或者19位浮點數表示時間,以秒為單位,開始時間是1904年1月1日星期5 12:00 am(UTC).LabVIEW在函數面板中有幾個時間相關的節點函數
  • LabVIEW中結構體控制項編程實例
    1、結構體簡介LabVIEW中的結構體(中文版翻譯為「簇」)是常用的一種數據結構類型,一個結構體控制項中可以包含任意多個任意類型的不同元素。與數組不同的地方在於,它包含的元素數據類型可以相同,也可以不同,而數組中只能包含相同類型的多個元素。
  • LabVIEW編程實例:如何創建並使用多態VI程序
    下面通過一個具體實例演示LabVIEW中多態VI程序的創建及使用方法。例子說明編程實現一個多態VI程序——、y皆為double類型,輸出參數z為double類型,其值為x、y兩個數值相加的結果l X、
  • MATLAB整數類型
    MATLAB 中有 8 種類型的整數,其中包括 4 種有符號整數和 4 種無符號整數:有符號整數能夠表示負整數和正整數,而無符號整數類型只能表示正整數和
  • 你所不知道的C語言經典九大編程實例思想
    獲取更多精彩文章請關注云主宰蒼穹引言:對於學習計算機程式語言而言,一門程式語言的經典思想是十分重要的。這是一門計算機程式語言的特色優點,是其解決問題的經典思維。你所了解的C語言,有哪些經典的編程實例思想,歡迎下方留言交流!
  • LabVIEW基礎知識:手把手以實例教你學For循環和移位寄存器編程
    另外,由於它並非一種封閉的語言,而是具有強大的外部接口能力,可以實現與C/C++、Basic、Matlab等程式語言互通的能力,現在,LabVIEW不僅僅局限於虛擬儀器軟體類的開發,而是已經發展成為了一種通用的、完善的、開放的高級程式語言。
  • LabVIEW編程實例:計算階乘,學習for循環+移位寄存器+遞歸調用
    階乘定義非負整數n的階乘簡記為n!,在數學上定義為所有小於等於該數的正整數的乘積,並且定義0的階乘等於1,用公式表示為:n!=1根據這兩種定義方式,下面給出在LabVIEW中編程實現求解n!的兩種方法。階乘求解方法1:使用for循環+移位寄存器實現這種方法實現相對來說比較簡單,程序框圖如下圖所示:在上圖中,直接根據階乘定義使用for循環與移位寄存器的思路實現n!
  • 一個人開發一個產品,小程序從0到1,第7章 數據類型之數值
    小程序定義變量時,不用指定數據類型,根據值進行類型推斷即可。推斷結果為數據類型number、string、boolean、object、array、function和regexp、date八種中的其中一種。有編程經驗的同志應該知道,沒編程經驗的同學要知道,在很多程式語言中,原始數據類型是不能調用方法的。
  • PLC、機器人編程、labviEW軟體等
    ,程序上傳下載、備份、故障診斷GX Developer軟體使用技巧和快捷方式有效增加您工作效率PLC\硬體故障外圍判讀方法二: PLC指令系統及其學習方法軟元件總類、使用方法及數據類型,數據格式工程案例中軟元件的使用方法及技巧及案例分析工程常用程序段分析及其使用
  • LabVIEW編程技巧:功能強大的變體數據類型用法
    變體數據類型簡介LabVIEW是一種圖形化程式語言,所以也叫G語言,在程序框圖上連線時,必須相同類型或者能強制相互轉換的類型埠才能連接在一起,例如我們不能將一個數值型的控制項連接到布爾型的控制項上,也不能將一個數組類型的控制項連接到簇類型的控制項上。
  • labview的深入探索之事件結構中的TIMEOUT進行數據採集合適嗎?
    最近看到利用事件結構中超時TIMEOUT事件進行數據採集的方法,過去我也過這種方法.優點:不再需要單獨的數據採集循環,使用SHFIT REGISTER就可以在其他事件中共享數據. labview串口數據保存_labview如何對串口數據緩存 LabVIEW是一種基於圖形程式語言的開發環境
  • 實例集錦與提高技巧,助你高效學習LabVIEW
    就編者身邊認識的同事,還有曾經認識的師弟師妹們,就有很多以前用VC,C#,VB,Delphi編程的,也都開始學習LabVIEW編程。編者認為LabVIEW的應用領域很廣,前景也是很不錯的。作為測試行業的翹楚,加之目前人們對於產品穩定性、高可靠性的追求,使用LabVIEW也是個絕佳的選擇。但是也有很多的人,在學習LabVIEW過程中反映太難學了,怎麼學都學不好。
  • LabVIEW編程基礎:以實例學編程之順序結構
    LabVIEW又稱為G語言,簡單易學、形象直觀,採用圖形化的編程方式,是專為測試、測量和控制應用而設計的系統工程軟體。同C語言編程一樣,LabVIEW中也有對應的三大程序執行框架結構,分別為順序結構、循環結構和選擇結構。
  • 「python學習手冊-筆記」003.數值類型
    數值類型的基本知識Python中的數值類型主要包括以下三類: **整數:**也就是我們所熟悉的int類型. 在python3之中,不再區分整數和長整數.也就是說允許整數具備無限的精度. 當然,這個精度取決於我們計算機的內存大小.
  • 少兒編程Python第4課-for循環語句(質數判斷)
    for循環的語法格式很容易理解,主要有三種類型,分為數值循環、遍歷列表和元組、遍歷字典。我們通過幾個實例來熟悉它的用法。,例如:- `range(101)`可以產生一個0到100的整數序列。- `range(1, 100)`可以產生一個1到99的整數序列。- `range(1, 100, 2)`可以產生一個1到99的奇數序列,其中2是步長,即數值序列的增量。知道了這一點,我們舉一反三,來實現1~100之間的偶數求和。