LabVIEW-平化数据

LabVIEW将数据从其内存格式转换为一种更适于进行文件读写的格式。这种更适合读写的格式称为平化数据。

由于LabVIEW将字符串、数组和路径保存在句柄(指向位于不同内存区域中指针的指针)中,因此含有这些字符串和数组的簇的存储是不连续的。LabVIEW一般以树的形式保存数据。例如,LabVIEW将簇保存为双精度浮点数,将字符串保存为8字节的浮点数及4字节的句柄。在LabVIEW中,字符串数据与扩展精度浮点数的保存位置不相邻。因此,将簇数据写入磁盘时,LabVIEW必须从两个不同的地址获取数据。LabVIEW通过含有大量字符串、数组或路径的簇将数据保存在不同的地址。

将数据存入文件时,LabVIEW会在保存前将数据平化为一个字符串。数据的字符串化可使一个无序而复杂的簇中的数据不再处于不同地址而变得连续。从文件加载数据时,LabVIEW必须反向操作,即读取一个字符串并将其还原为非连续的内部形式。

LabVIEW将平化的数据标准化为标准形式,使任何平台上的VI都可使用这些数据。LabVIEW将平化的数值数据以big-endian(高位字节在先)的形式保存, 将平化的扩展精度浮点数以16字节的格式保存。

将数据写入文件或从文件读取时,如使用该文件的应用程序并非由LabVIEW创建,则在进行平化及还原操作的前后应把数据转换为little-endian(低位字节在先)或big-endian的形式。基于Windows的应用程序通常默认little-endian形式的数值数据。

平化至字符串从字符串还原函数可对数据进行平化和还原,该操作与LabVIEW保存和加载数据时对数据进行的平化转换相同。

数据的平化格式并不对该数据的类型编码。LabVIEW将数据类型信息保存在类型描述符中。“从字符串还原”函数要求将数据类型作为一个输入端接入,以使函数对该字符串正确解码。

变体数据类型可在不受数据类型影响的情况下操作数据,从而避免数据从内存读写时进行还原操作和平化操作。变体函数可创建和操作变体数据。

注:如在变体数据上使用“变体至平化字符串转换”函数,LabVIEW将平化变体及其所有内容,包括其属性。但是,如使用“平化至字符串”函数,LabVIEW将只平化变体,丢弃所有属性。

布尔和数值对象

数值型数据和布尔数据的平化形式仅以big-endian形式保存。例如,一个值为-19的32位二进制整数转换为字符串后的形式是FFFF FFED。值为1/4的双精度浮点数转换为字符串后为3FD0 0000 0000 0000。布尔值TRUE为任意非零值。布尔值FALSE为00。

平化的扩展精度数为128位二进制扩展精度浮点格式。LabVIEW在磁盘上用该格式保存扩展精度数。

字符串和路径

由于字符串和路径的大小不同,经平化的字符串和路径前将出现一个平化的32位二进制整数,以字节为单位记录它们的长度。例如,一个值为ABC的字符串型数据经平化转换后为0000 0003 4142 43。对于字符串来说,其平化的格式与其在内存中的格式相仿。

但对于路径而言,LabVIEW将其保存于内存时,路径前并没有长度值。因此路径的长度值即是它在内存中的实际大小,而该值将在LabVIEW对路径平化后出现在平化的路径前。长度值前有4个字符:PTH0。

例如,一个值为C:\File的路径,其平化格式为55054 4830 0000 000B 0000 0002 0143 0466 696C 65。

5054 4830表示PTH0。0000 000B表示共有11个字节。0000为类型。0002为路径组件的个数。0143表示字母C为Pascal字符串。0466 696C 65表示文件一词为Pascal字符串。

数组

数组每一维度的大小被平化为32位二进制整数,该整数出现在平化的数组数据之前。变化速度最慢的维度在最先,随后依次是变化速度更快的维度。这种保存方式与维度大小在内存中保存的方式相同。平化的数据紧接着维度大小后排列,其排列顺序与LabVIEW保存这些数据的顺序相同。下图表示的是一个具有6个8位二进制整数的二维数组。

{ {1, 2, 3}, {4, 5, 6} }经转换后的字符串形式为0000 0002 0000 0003 0102 0304 0506。

下图表示的是一个具有6个8位二进制整数的二维数组。

{T, F, T, T}经平化后的形式为0000 0004 0100 0101。TRUE的值最好为01。

平化的簇是将簇中元素的平化数据按照其在簇中的顺序所作的连接。例如,一个由值为4(十进制)的16位二进制整数及值为12的32位二进制整数所组成的平化簇表示为0004 0000 000C。

一个由字符串ABC和值为4的16位二进制整数所组成的平化簇表示为0000 0003 4142 4300 04。

一个由值为7的16位二进制整数、值为8的16位二进制整数簇及值为9的16位二进制整数所组成的平化簇表示为0007 0008 0009。

波形

LabVIEW将波形转换为字符串的方式与转换簇相同。

引用句柄

LabVIEW将大多数平化的引用句柄保存为平化的32位二进制整数,一种LabVIEW内部数据结构。

其他引用句柄可按其类型代码作以下分类。

类型代码0xE、0xF和0x15是将数据保存为平化字符串的引用句柄。该字符串含有引用句柄标签的值,且可以为空(4个0字节)。

类型代码0x1A、0X1C和0x1D按以下顺序连接。

  1. 平化字符串用于引用句柄标签的名称。如引用句柄没有标签则该字符串为空(4个0字节)。
  2. 含有该引用句柄专有信息的平化字符串。该字符串可为空(4个0字节)。
  3. 含有该引用句柄专有信息的平化字符串。该字符串可为空(4个0字节)。
  4. 含有该引用句柄专有信息的平化32位二进制有符号整数。
  5. 含有该引用句柄专有信息的平化字符串。该字符串可为空(4个0字节)。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值