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
相关产品推荐
相关产品推荐

