首先要区分的是控件和数据类型的区别.

       控件是数据类型的容器,或者说数据类型是控件的一个属性,控件都有一个值的属性,这个值的类型就是控件所代表的数据类型.

       描述一个控件是通过类型描述符实现的,它包括控件的名称、控件类型及控件所代表的数据类型等等。

       今天要谈的与控件本身无任何关系,是数据类型在内存中如何存储的,或者称作数据的内存映射。

我们知道,无符号整型数有U8、U16、U32、U64

U8  是指8位(BIT),一个字节(BYTE),     值范围:0X00---->0XFF
U16是指16位(BIT),二个字节(BYTE),   值范围:0x0000--->0XFFFF

U32是指32位(BIT),四个字节(BYTE),   值范围:0X00000000---》0XFFFFFFFF

U64是指64位(BIT),八个字节

      标准的数据类型在内存中是连续存放的,比如U32,是四个字节,那么一个U32就占用连续的4个字节的内存空间,同理,U16占用2个字节的空间,U64占用8个字节的连续空间。单精度是4个字节,双精度是8个字节。

通过下面的例子,可以清楚地看到,数据类型与字节的关系。


      上面的图中的字符串是用HEX方式显示的,清楚地表明了U16--》2BYTE,U32--》4BYTE,U64----》8BYTE

以U32为例,它由四个字节组成,而这四个字节,可以理解成很多方式,它可以是

字符串-----四个字符,每个字符一个字节
U8数组-----四个元素,每个元素一个字节
U16数组---二个元素,每个元素占两个字节

LABVIEW的簇与C的结构不同,它是连续按字节存放的,未采用对齐方式,因此我们甚至可以理解成一个簇

这个簇可以是:
四个U8元素、2个U16元素、一个U8,一个U16和一个U8,总之,只要是四个字节就可以,对内存本身来说,是无法判断它到底存储的是什么的。

LABVIEW中有一个“CAST”函数,中文版翻译成强制类型转换,CAST本意是铸造模型的意思,用它的本意比较合适,对于四个字节,我们可以按照我们自己的理解转换成任意数据类型,只要它的字节数相同。

如果我们熟悉数据在内存中的映射关系,用CAST函数可以解决一些特殊的类型转换问题。


U32转换成U8数组和U8组成的簇结果相同
直接用CAST把U32转换成U16数组和U16组成的簇与LV内置的拆分函数结果相同。




Leave a Reply.