2014-01-16 69 views
1

这不是一个真正的问题,如何做某件事,更多的是为了满足我的好奇心。labview如何区分数组大小信息和数组数据?

根据this,在存储器作为一系列描述每个维度后跟实际数据的大小的int32s Labview的存储阵列。因此,例如,大小为3x5的二维数组将被存储为

0: 3 
4: 5 
8: data starts here 

现在假设您有一个int32s数组。 labview如何区分实际数据和阵列大小信息?例如,在上面的例子中,labview如何知道它是一个3x5的数组而不是长度为3的一维数组,然后忽略其余的元素?对不起,如果有什么明显的,我失踪了。

回答

1

当数据引用围绕在LabVIEW内部传递,数据类型总是传来传去了。数据以void指针的形式传递,并且类型与它们一起传递。因此,无论LabVIEW何时看到您的数组,它都会看到该类型是int32s的二维数组。 (我在NI的LabVIEW团队工作)

1

如果你看看LabVIEW知识库文章How LabVIEW stores data in memory,你会发现每种数据类型都存储有类型信息。对于一个数组,它首先存储每个维度的I32,然后是平坦数据。 实际的数据类型存储在它的type-descriptor,它由不同的容式描述的列表。对于数组中的最小值为2:

  1. 阵列
  2. 数组中的数据

阵列的类型描述符是

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

其中nn是总数据包大小
xx40是阵列数据类型
k是总维数

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

0004 XX03 XX

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

然而它已被LabVIEW的7和8依托类型DESCR之间改变iptor是你不应该惹自己的东西。让LabVIEW处理这个问题。