获取类型数组的记录字段的长度

时间:2012-03-27 10:01:26

标签: delphi

我正在编写一个与外部二进制API进行通信的包装器。 API使用PDU(打包二进制记录)进行通信。字符串是AnsiChar的数组,并且是零终止的:

type 
  TSomePDU = packed record
    //...
    StringField: array[0..XYZ] of AnsiChar;
    //...
  end;
  PSomePDU = ^TSomePDU;

我想编写一个接受String并填充char数组的FillPDUString过程,但是我想避免在使用过程的任何地方跟踪MaxLength,所以我需要以某种方式获取声明的数组大小给定指向该领域:

function GetMaxSize(const Field: array of AnsiChar): Integer;
begin
  // ???
end;

//...
GetMaxSize(ARecord.StringField);

这可能吗?

2 个答案:

答案 0 :(得分:6)

如果我理解正确,那么你可以使用Delphi的Length函数

以下是如何获得长度:

function GetMaxSize(const Value: PSomePDU): Integer; 
begin
  Result := Length(Value.StringField);
end;

答案 1 :(得分:6)

要获取数组包含的元素数,请使用Length

ElementCount := Length(ARecord.StringField);

使用lowhigh获取任何Delphi数组的边界。

MinIndex := low(ARecord.StringField);
MaxIndex := high(ARecord.StringField);

使用后一种方法,使用lowhigh,可以避免假设数组是基于0的。