「ShortStrings」は「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
または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 #0 char (AnsiChar or UnicodeChar)
したがって、AnsiString
とUnicodeString
タイプの間にいくつかの類似点がある場合、short string
タイプは完全に多様であり、希望どおりに混合することはできません。