固定長のDelphi文字列を幅広い文字を使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/4794285

質問

Delphi 2010(およびおそらくD2009もおそらく)では、デフォルトの文字列タイプはUnicodestringです。

しかし、私たちが宣言した場合...

const
 s  :string = 'Test';
 ss :string[4] = 'Test';

...次に、最初の文字列 s として宣言されている場合 ユニコドストリング, 、しかし2番目のもの ss として宣言されています アンシストリング!

これを確認できます: SizeOf(s[1]); サイズ2を返します SizeOf(ss[1]);サイズ1を返します。

私が宣言した場合...

var
  s  :string;
  ss :string[4];

...私はそれが欲しいより ss ユニコドストリングタイプでもあります。

  1. Delphi 2010に、両方の文字列がユニコドストリングタイプでなければならないことをどのように伝えることができますか?
  2. 他にどのように宣言できますか ss 4つのワイディチャーを保持しますか?コンパイラはタイプ宣言を受け入れません WideString[4] また UnicodeString[4].
  3. 2つの目的は何ですか 違う 同じことのコンパイラ宣言 タイプ 名前: ストリング?
役に立ちましたか?

解決

これに対する答えは、その事実にあります string[n], 、 これは ShortString, 、現在、レガシータイプと見なされています。エルバカデロは、変換しないという決定を下しました ShortString Unicodeをサポートするため。長い文字列が導入されて以来、私の記憶が正しく機能している場合、それは私にとって合理的な決定のようです。

WideCharの固定された長さの配列が本当に必要な場合は、単純に宣言することができます array [1..n] of char.

他のヒント

  1. 使用することはできません string[4] タイプとして。そのようにそれを自動的に宣言すると、それは空洞化になります。

  2. 代わりにそれを一連のcharとして宣言します。

  3. a string[4] 4文字を含む文字列になります。ただし、WideCharsのサイズが複数のバイトになる可能性があるため、これはa)間違っており、b)紛らわしいものになります。下向きの互換性のためにまだ不足は周りにあり、[x] 1つのバイトcharで構成されているため、自動的に調整されています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top