新聞中心

EEPW首頁 > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > LabVIEW的數(shù)據(jù)類型、存儲(chǔ)格式

LabVIEW的數(shù)據(jù)類型、存儲(chǔ)格式

作者: 時(shí)間:2017-01-06 來源:網(wǎng)絡(luò) 收藏
先了解控件和數(shù)據(jù)類型的關(guān)系。LV控件面板上的圖標(biāo)都是典型的控件,說通俗一些,控件就是一個(gè)包含很多屬性的容器,值是控件的一個(gè)屬性,如下圖所示的數(shù)字輸入控件,值的數(shù)據(jù)類型就是控件所代表的數(shù)據(jù)類型,描述一個(gè)控件是通過類型描述符實(shí)現(xiàn)的,包括控件的名稱、控件類型及控件所代表的數(shù)據(jù)類型等等。了解LV的數(shù)據(jù)類型是非常有必要的。特別是使用DLLs(shared libraries)、CINs(code interface nodes)或需要利用文件I/O往文件寫入/讀取二進(jìn)制數(shù)(binary data)的用戶,更有必須了解數(shù)據(jù)結(jié)構(gòu)類型及在內(nèi)存中存儲(chǔ)格式

本文引用地址:http://butianyuan.cn/article/201701/336641.htm

數(shù)據(jù)類型之一——數(shù)字(Numeric)

包括:byte、word、long、SGL、DBL等

數(shù)據(jù)類型之二——數(shù)值型數(shù)組(Array)

存儲(chǔ)為一個(gè)句柄(handle,指針的指針),指向的結(jié)構(gòu)包括一個(gè)數(shù)值(I32)和一個(gè)數(shù)組,數(shù)值表達(dá)數(shù)組的大小,數(shù)組的元素表達(dá)每一個(gè)數(shù)字,這些數(shù)字在內(nèi)存中連續(xù)存儲(chǔ)。

提示:為了正確對(duì)齊數(shù)字,在第一個(gè)數(shù)字前可能需要附加一些字節(jié)數(shù)。當(dāng)句柄為0,則是空數(shù)組。下列兩圖分別描述一維單精度(SGL)浮點(diǎn)數(shù)組、四維字整數(shù)(I16)數(shù)組,左邊的數(shù)字代表偏移(offset)數(shù)組在內(nèi)存起始存儲(chǔ)位置的字節(jié)數(shù)。

其他數(shù)據(jù)類型

布爾、字符串、字符串?dāng)?shù)組、簇、路徑

布爾(Boolean)型數(shù)據(jù)是字節(jié)型數(shù)據(jù),存儲(chǔ)為8位數(shù)值(一個(gè)字節(jié)),數(shù)值0表示False,其余數(shù)值代表True。布爾數(shù)組的存儲(chǔ)格式如下圖所示:

字符串(string)是一個(gè)字符型數(shù)組,存儲(chǔ)為一個(gè)句柄(handle),指向的結(jié)構(gòu)包括一個(gè)數(shù)值和一個(gè)數(shù)組(與數(shù)值型數(shù)組相同)。數(shù)組每個(gè)成員表達(dá)一個(gè)字符,數(shù)值表達(dá)數(shù)組長度。

字符串?dāng)?shù)組(Array of Strings)是非常特殊的數(shù)據(jù)類型,這也是CLF和CIN的難點(diǎn)。字符串在內(nèi)存中是連續(xù)存儲(chǔ)的,但是,字符串?dāng)?shù)組卻與一般連續(xù)存放的二維數(shù)組不同,其元素(字符串)是以長度開頭連續(xù)存儲(chǔ)的,而字符串?dāng)?shù)組本身是存儲(chǔ)在內(nèi)存中另外位置的。(通過句柄與字符串建立聯(lián)系)

提示:

1:和其他類型的數(shù)組一樣,字符串?dāng)?shù)組也是以I32長度開頭的,接下是每個(gè)字符串的首地址指針(句柄)——U32數(shù)值,表示字符串在內(nèi)存中的地址(第一個(gè)字符)。由于字符串?dāng)?shù)組需要從內(nèi)存的不同區(qū)域訪問字符串(連續(xù)存儲(chǔ)),會(huì)耗費(fèi)更多的時(shí)間,因此,用一個(gè)長的字符串代替字符串?dāng)?shù)組,程序會(huì)更加高效。

2:LV是以句柄(Handle)描述數(shù)組和字符串,Handle本身是U32,占四個(gè)字節(jié),它包含的內(nèi)容是指向一個(gè)數(shù)據(jù)結(jié)構(gòu)的指針,因?yàn)閿?shù)據(jù)結(jié)構(gòu)在內(nèi)存中是可以重新分配的,所以它的地址會(huì)經(jīng)常發(fā)生變化,而Handle的地址是不會(huì)變化的,通過Handle就可以跟蹤數(shù)據(jù)結(jié)構(gòu)。另外,對(duì)于每個(gè)數(shù)組和字符串,在長度信息之前還有一個(gè)16個(gè)字節(jié)的頭部信息,(LV內(nèi)部使用,類型描述符),因此一個(gè)最簡單的數(shù)組至少占24個(gè)字節(jié):HANDLE(U32)+HEADER(16Byte)+SIZE(I32)=24 BYTE。

簇是一種數(shù)據(jù)類型,一個(gè)簇是一個(gè)由若干數(shù)據(jù)類型的成員組成的集合體,類似于C語言中的結(jié)構(gòu)體和Pascal語言中的記錄。簇的成員有一種邏輯上的順序,這是由它們放進(jìn)去的先后順序決定的,與它們?cè)诖刂袛[放的位置無關(guān)。前面的成員被刪除時(shí),后面的成員會(huì)遞補(bǔ)。改變簇成員邏輯順序的方法是在簇上彈出快捷菜單,選Reorder Controls In Cluster…彈出一個(gè)對(duì)話框,為簇成員設(shè)置新的邏輯順序。

在內(nèi)存中,簇直接存放標(biāo)量數(shù)據(jù)(numeric)。對(duì)于數(shù)組、字符串或路徑,簇只是存儲(chǔ)這些數(shù)據(jù)類型的的首地址指針。不同操作平臺(tái)(OS)在數(shù)據(jù)對(duì)齊有所差異,為確保存儲(chǔ)數(shù)據(jù)的第一個(gè)元素對(duì)齊,可能需要往這個(gè)元素前添加一些字節(jié)數(shù)。下列圖形顯示一個(gè)簇(元素包括單精度浮點(diǎn)數(shù)、擴(kuò)展精度浮點(diǎn)數(shù)和一個(gè)指向一維無符號(hào)字整型數(shù)組的首地址指針)在不同操作系統(tǒng)下的存儲(chǔ)格式。

提示:簇可以直接嵌套簇,簇間接存儲(chǔ)的數(shù)據(jù)(指針)只有數(shù)組、字符串或路徑這三種數(shù)據(jù)類型。下圖顯示簇(元素兩個(gè)標(biāo)量數(shù)字加一個(gè)數(shù)組)和簇(元素為一個(gè)帶兩個(gè)標(biāo)量數(shù)字的簇和一個(gè)數(shù)組)具有相同的存儲(chǔ)方式。

路徑

路徑:使用標(biāo)準(zhǔn)的Windows語法,可以使用相對(duì)路徑和絕對(duì)路徑。存儲(chǔ)為路徑類型、路徑成員數(shù)和路徑成員。



評(píng)論


技術(shù)專區(qū)

關(guān)閉