我正在编写一个与外部二进制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);
这可能吗?
答案 0 :(得分:6)
如果我理解正确,那么你可以使用Delphi的Length函数
以下是如何获得长度:
function GetMaxSize(const Value: PSomePDU): Integer;
begin
Result := Length(Value.StringField);
end;
答案 1 :(得分:6)
要获取数组包含的元素数,请使用Length
。
ElementCount := Length(ARecord.StringField);
使用low
和high
获取任何Delphi数组的边界。
MinIndex := low(ARecord.StringField);
MaxIndex := high(ARecord.StringField);
使用后一种方法,使用low
和high
,可以避免假设数组是基于0的。