如何使固定长度的Delphi字符串使用宽字符?
-
24-10-2019 - |
题
根据Delphi 2010(也可能是D2009),默认字符串类型是Unicodestring。
但是,如果我们声明...
const
s :string = 'Test';
ss :string[4] = 'Test';
...然后是第一个字符串 s 如果被宣布为 Unicodestring, ,但第二个 SS 被宣布为 ansistring!
我们可以检查一下: SizeOf(s[1]);
将返回尺寸2和 SizeOf(ss[1])
;将返回尺寸1。
如果我声明...
var
s :string;
ss :string[4];
...比我想要的 SS 也是Unicodestring类型。
- 我该如何告诉Delphi 2010这两个字符串都应该是Unicodestring类型?
- 我还能怎么声明 SS 持有四个Widechars?编译器将不接受类型声明
WideString[4]
或者UnicodeString[4]
. - 两个的目的是什么 不同的 同一编译器声明 类型 姓名: 细绳?
解决方案
答案在于一个事实 string[n]
, ,这是一个 ShortString
, ,现在被认为是遗留类型。 Embarcadero做出了不转换的决定 ShortString
支持Unicode。由于引入了长字符串,如果我的记忆在Delphi 2中正确使用,这对我来说似乎是一个合理的决定。
如果您真的想要固定的长度阵列,那么您可以简单地声明 array [1..n] of char
.
其他提示
你不能使用
string[4]
作为类型。以这种方式声明它会自动使其成为短串。将其声明为炭数阵列,这将使它成为4个widechars的数组。
因为
string[4]
使其成为包含4个字符的字符串。但是,由于widechars的大小可能不止一个字节,所以这将是a)错误,b)令人困惑。短串仍然存在于向后兼容,并且自动隔离,因为它们由[x]一个字节字符组成。
不隶属于 StackOverflow