“短字符串”是指“Ansi字符串”,因为它们仅用于向后兼容Delphi代码之前的版本。
st: string[3];
自Delphi 2009以来,始终会使用当前的Ansi Code Page / Char Set创建固定长度的“短字符串”。
但是这样的短字符串与所谓的“AnsiString”不同。短字符串没有代码页。因为短字符串没有引用计数。
代码页仅适用于“AnsiString”类型,它们不是固定长度,而是可变长度且具有引用计数的完全不同类型,与由“string[...]”定义的短字符串不同。
按设计,您不能简单地混合使用“Short String”和“AnsiString”类型声明。两者都被称为“字符串”,但是它们是不同的类型。
以下是“Short String”的映射:
st[0] = length(st)
st[1] = 1st char (if any) in st
st[2] = 2nd char (if any) in st
st[3] = 3rd (if any) in st
这是 AnsiString
或 UnicodeString
类型的内存映射:
st = nil if st=''
st = PAnsiChar if st<>''
这里是 PSt: PAnsiChar
的布局:
PWord(PSt-12)^ = code page
PWord(PSt-10)^ = reference count
PInteger(PSt-8)^ = reference count
PInteger(PSt-4)^ = length(st) in AnsiChar or UnicodeChar count
PAnsiChar(PSt) / PWideChar(PSt) = Ansi or Unicode text stored in st, finished by a
因此,如果AnsiString
和UnicodeString
类型之间存在一些相似之处,那么short string
类型则完全不同,并且不能像您希望的那样混合使用。
AnsiString[3]
? - Cosmin Prund