You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中TEncoding.GetBytes方法里Low(S)的作用是什么?

解析TEncoding.GetBytes中Low(S)的作用

先看你贴出的基础版GetBytes实现:

function TEncoding.GetBytes(const S: string): TBytes;
var
  Len: Integer;
begin
  Len := GetByteCount(S);
  SetLength(Result, Len);
  GetBytes(S, Low(S), Length(S), Result, 0, Low(S));
end;

对应的重载方法定义:

function TEncoding.GetBytes(const S: string; CharIndex, CharCount: Integer;
  const Bytes: TBytes; ByteIndex: Integer; const StringBaseIndex: Integer): Integer;

方法注释翻译为:

// StringBaseIndex:调用者上下文环境中字符串的最小索引值

下面拆解Low(S)的作用:

1. Low(S)的本质

在Delphi中,Low(S)返回字符串类型的最小有效索引值:

  • 现代Delphi(2009及以后)默认的UnicodeString(即string类型)是0基索引,Low(S)固定返回0;
  • 更早版本的ShortString或启用{$STRINGBASE 1}编译指令时,字符串是1基索引,Low(S)会返回1。

2. 两个Low(S)的具体作用

调用重载方法时传入的两个Low(S)对应不同参数:

  • 第一个Low(S)作为CharIndex参数:指定要编码的字符串起始位置,因为要编码完整字符串,所以从字符串的最小索引处开始;
  • 第二个Low(S)作为StringBaseIndex参数:告知重载方法「当前调用者使用的字符串索引基值」,让方法内部无需区分调用环境是0基还是1基,统一处理索引逻辑,避免因索引基值差异导致的错误。

内容的提问来源于stack exchange,提问作者Jan Doggen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 03:14:56