labview如何区分数组大小信息和数组数据?

时间:2014-01-16 01:37:38

标签: labview

这不是一个关于如何做某事的问题,而是为了满足我的好奇心。

根据this,Labview将数组作为一系列int32存储在内存中,这些int32描述了每个维度的大小,后跟实际数据。因此,例如,大小为3x5的2-d阵列将存储为

0: 3
4: 5
8: data starts here

现在假设你有一个int32数组。 labview如何判断实际数据和数组大小信息之间的区别?例如,在上面的示例中,labview如何知道它是3x5数组而不是长度为3的1-d数组,然后忽略其余的元素?对不起,如果有一些我不知道的东西显而易见。

2 个答案:

答案 0 :(得分:3)

如果查看LabVIEW知识库文章How LabVIEW stores data in memory,您会看到每个数据类型都存储有类型信息。对于数组,它首先为每个维度存储一个I32,然后是flattenend数据。 实际的数据类型存储在它的type-descriptor中,它由不同包含的类型描述符列表组成。对于数组,最小值为2:

  1. 数组
  2. 数组中的数据
  3. 数组的类型描述符是

      

    <nn> xx40 <k> <k dims> <k elems> <element type descriptor>

    其中nn是总数据包大小
    xx40是数组数据类型
    k是维度的总数

    对于包含的I32,类型描述符是:

      

    0004 xx03 xx

    0004是类型描述符的长度 03是I32类型标识符

    然而,它已经在LabVIEW 7和8之间进行了更改。依靠类型描述符是你不应该自己搞砸的东西。让LabVIEW处理这个问题。

答案 1 :(得分:2)

当在LabVIEW内部传递对数据的引用时,数据类型也总是传递。数据作为void指针传递,类型与它们一起传递。因此,只要LabVIEW看到您的阵列,它也会看到该类型是int32s的二维数组。 (我在National Instruments的LabVIEW团队工作)