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