【发布时间】:2011-10-13 18:19:54
【问题描述】:
出于我的目的,我实际上是在真正使用 ASCII 字符数据(用于向州提交 ASCII 文本文件),因此仅使用 unicodestring 无助于最终结果(我仍然需要转换一些东西)。
我可以选择在 Delphi 2009 中转换 StrComp 函数,该函数从比较 AnsiString 和 PAnsiChar 到 UnicodeString 和 PAnsiChar。
Val : PAnsiChar
Mask : TEditMask;
....
这是我原来的代码,不好
StrComp(PAnsiChar(Mask.EditText), Val);
....
所以,我可以改成这样:
StrComp(PAnsiChar(AnsiString(MAskEdit.EditText), Val);
或者,我可以将其更改为这个(“清晰度”的额外转换):
StrComp(PChar(MAskEdit.EditText), PChar(String(AnsiString(Val))));
我记得 Marco Cantu 说过,不要循环执行其中一项,我只是不记得是哪一项或为什么。
【问题讨论】:
-
您可以像 VCL AnsiStrings 单元一样从 kernel32 调用 CompareStringA(从 Windows.pas 获取它)。然后你必须从 Unicode 到 Ansi 进行 1 次转换。这真的是瓶颈吗?
-
最大的问题似乎是当你不断追加到一个不断增长的字符串时。阿拉
UnicodeStr := ANSIStr + UnicodeStr。我只是不知道这在 CPU 上是否比ANSISTr := UnicodeStr + AnsiStr更容易。没关系是一个完全可以接受的答案。 -
为此使用 StringBuilder。这个问题是关于堆分配的。尽量减少转换。所以在不转换的情况下构建字符串,然后在最后阶段进行转换。
-
似乎很容易自己测试。但是你有没有注意到任何糟糕的性能以至于值得你去修改你的代码?
-
@Rob 还没有完成所有 292 个错误和警告。我自己写测试可能会自己回答。
标签: delphi unicode delphi-2009