“Short Strings”是“Ansi”字符串,因为它只用于向后兼容预Delphi 代码。
st: string[3];
自 Delphi 2009 起,将始终使用当前的 Ansi 代码页/字符集创建一个固定长度的“短字符串”。
但是这样的短字符串与所谓的不一样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
orUnicodeString
类型的内存映射:
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 #0 char (AnsiChar or UnicodeChar)
AnsiString
因此,如果和UnicodeString
类型之间存在一些相似之处,则short string
类型是完全多样化的,不能随心所欲地混合。