2015-05-19 86 views
2

我怎样才能获得与例如特定索引的数组的长度,如果我有这样的PASCAL:获取数组的长度[X]

TYPE T_PERSON = PACKED RECORD 
    Example : STRING[40]; 
    Example2 : STRING[10]; 
    Example3 : STRING[5]; 
END; 
example: ARRAY [1..30] OF T_PERSON 

数组,我想知道的example[28]长度分别为example[x]。 我可以通过LENGTH()获得吗?还是有其他解决方案?

+0

你的意思是[SizeOf](http://www.freepascal.org/docs-html/rtl/system/sizeof.html)函数吗? – Abelisto

回答

2

如果它是一个数组,你想要的元素个数:

high(example)-low(example)+1; 

据我所知有免费的Pascal和Delphi 4+长度可能也行,但不要束缚我这一点。

如果需要的字节大小,Abelisto是正确的和sizeof()是你想要的,它也适用于记录的部分(例如的sizeof(example.example))。

如果由于对齐字节而未包装,则总和可能不会加起来。

0

“示例”数组的每个单元/元素都有SizeOf(T_PERSON)。这是字节数。

现在,SizeOf(T_PERSON)是58个字节。

什么我无法解释就是为什么它是58个字节,而不是55个字节(因为我希望它对于非包装的记录),或甚至56个字节(4字节边界对齐包装记录)。

也许别人可以对此有所了解。

+1

像string [x]这样的短字符串以长度字节为前缀。这使得55字节字符数据+ 3 x长度字节= 58字节。 –

+0

我应该记住的。使用'AnsiChar'的数组[x .. y]给出确切的大小。 – Adem

0

是的,你也可以用Length函数来获得它。

function Length(A: DynArrayType):Integer;