labview的深入探索----整型數(shù)據(jù)類型和內(nèi)存映射
掃描二維碼
隨時(shí)隨地手機(jī)看文章
首先要區(qū)分的是控件和數(shù)據(jù)類型的區(qū)別.
控件是數(shù)據(jù)類型的容器,或者說數(shù)據(jù)類型是控件的一個(gè)屬性,控件都有一個(gè)值的屬性,這個(gè)值的類型就是控件所代表的數(shù)據(jù)類型.
描述一個(gè)控件是通過類型描述符實(shí)現(xiàn)的,它包括控件的名稱、控件類型及控件所代表的數(shù)據(jù)類型等等。
今天要談的與控件本身無任何關(guān)系,是數(shù)據(jù)類型在內(nèi)存中如何存儲(chǔ)的,或者稱作數(shù)據(jù)的內(nèi)存映射。
我們知道,無符號(hào)整型數(shù)有U8、U16、U32、U64
U8 是指8位(BIT),一個(gè)字節(jié)(BYTE), 值范圍:0X00---->0XFF
U16是指16位(BIT),二個(gè)字節(jié)(BYTE), 值范圍:0x0000--->0XFFFF
U32是指32位(BIT),四個(gè)字節(jié)(BYTE), 值范圍:0X00000000---》0XFFFFFFFF
U64是指64位(BIT),八個(gè)字節(jié)
標(biāo)準(zhǔn)的數(shù)據(jù)類型在內(nèi)存中是連續(xù)存放的,比如U32,是四個(gè)字節(jié),那么一個(gè)U32就占用連續(xù)的4個(gè)字節(jié)的內(nèi)存空間,同理,U16占用2個(gè)字節(jié)的空間,U64占用8個(gè)字節(jié)的連續(xù)空間。單精度是4個(gè)字節(jié),雙精度是8個(gè)字節(jié)。
通過下面的例子,可以清楚地看到,數(shù)據(jù)類型與字節(jié)的關(guān)系。
上面的圖中的字符串是用HEX方式顯示的,清楚地表明了U16--》2BYTE,U32--》4BYTE,U64----》8BYTE
以U32為例,它由四個(gè)字節(jié)組成,而這四個(gè)字節(jié),可以理解成很多方式,它可以是
字符串-----四個(gè)字符,每個(gè)字符一個(gè)字節(jié)
U8數(shù)組-----四個(gè)元素,每個(gè)元素一個(gè)字節(jié)
U16數(shù)組---二個(gè)元素,每個(gè)元素占兩個(gè)字節(jié)
LABVIEW的簇與C的結(jié)構(gòu)不同,它是連續(xù)按字節(jié)存放的,未采用對(duì)齊方式,因此我們甚至可以理解成一個(gè)簇
這個(gè)簇可以是:
四個(gè)U8元素、2個(gè)U16元素、一個(gè)U8,一個(gè)U16和一個(gè)U8,總之,只要是四個(gè)字節(jié)就可以,對(duì)內(nèi)存本身來說,是無法判斷它到底存儲(chǔ)的是什么的。
LABVIEW中有一個(gè)“CAST”函數(shù),中文版翻譯成強(qiáng)制類型轉(zhuǎn)換,CAST本意是鑄造模型的意思,用它的本意比較合適,對(duì)于四個(gè)字節(jié),我們可以按照我們自己的理解轉(zhuǎn)換成任意數(shù)據(jù)類型,只要它的字節(jié)數(shù)相同。
如果我們熟悉數(shù)據(jù)在內(nèi)存中的映射關(guān)系,用CAST函數(shù)可以解決一些特殊的類型轉(zhuǎn)換問題。
U32轉(zhuǎn)換成U8數(shù)組和U8組成的簇結(jié)果相同
直接用CAST把U32轉(zhuǎn)換成U16數(shù)組和U16組成的簇與LV內(nèi)置的拆分函數(shù)結(jié)果相同。