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

Bor*_* B. 4 delphi

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

type 
  TSomePDU = packed record
    //...
    StringField: array[0..XYZ] of AnsiChar;
    //...
  end;
  PSomePDU = ^TSomePDU;
Run Code Online (Sandbox Code Playgroud)

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

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

//...
GetMaxSize(ARecord.StringField);
Run Code Online (Sandbox Code Playgroud)

这可能吗?

Com*_*sNo 6

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

以下是获取长度的方法:

function GetMaxSize(const Value: PSomePDU): Integer; 
begin
  Result := Length(Value.StringField);
end;
Run Code Online (Sandbox Code Playgroud)


Dav*_*nan 6

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

ElementCount := Length(ARecord.StringField);
Run Code Online (Sandbox Code Playgroud)

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

MinIndex := low(ARecord.StringField);
MaxIndex := high(ARecord.StringField);
Run Code Online (Sandbox Code Playgroud)

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

  • 对于低和高的+1,通常人们假设数组是零基础的,只要我有机会,我将它们设为非零基础,这样它就会让生命变得更加辛辣^ _ ^ (3认同)