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

时间:2011-01-25 13:52:27

标签: delphi delphi-2010 unicode-string widestring

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

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

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

...然后第一个字符串 s 如果声明为 UnicodeString ,则第二个字符串 ss 声明为 ssiString < / STRONG>!

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

如果我宣布......

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

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

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

2 个答案:

答案 0 :(得分:9)

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

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

答案 1 :(得分:4)

  1. 您不能使用string[4]作为类型。以这种方式声明它会自动使它成为ShortString。

  2. 将其声明为Char数组,这将使其成为4个WideChars的数组。

  3. 因为string[4]使其成为包含4个字符的字符串。但是,由于WideChars的大小可能超过一个字节,因此这将是a)错误,并且b)令人困惑。 ShortStrings仍然是为了向后兼容,并且自动是AnsiStrings,因为它们由[x]一个字节的字符组成。