如何使固定长度的Delphi字符串使用宽字符?

GJ.*_*GJ. 3 delphi unicode-string widestring delphi-2010

在Delphi 2010下(也可能在D2009下),默认字符串类型是UnicodeString.

但是,如果我们宣布......

const
 s  :string = 'Test';
 ss :string[4] = 'Test';
Run Code Online (Sandbox Code Playgroud)

...然后第一个字符串s如果声明为UnicodeString,但第二个ss声明为AnsiString!

我们可以检查一下:SizeOf(s[1]);将返回大小2和SizeOf(ss[1]); 将返回大小1.

如果我宣布......

var
  s  :string;
  ss :string[4];
Run Code Online (Sandbox Code Playgroud)

...比我想要的ss也是UnicodeString类型.

  1. 我怎样才能告诉Delphi 2010这两个字符串应该是UnicodeString类型?
  2. 我怎么能宣布ss拥有四个WideChars?编译器不接受类型声明WideString[4]UnicodeString[4].
  3. 两个不同的编译器声明对于相同类型名称的目的是什么:string

Dav*_*nan 9

对此的答案在于string[n],这是一个ShortString现在被认为是遗留类型的事实.Embarcadero决定不转换ShortString为支持Unicode.由于引入了长字符串,如果我的记忆正确,在Delphi 2中,这对我来说似乎是一个合理的决定.

如果你真的想要WideChar的固定长度数组,那么你可以简单地声明array [1..n] of char.