这与 SameText
问题略有不同。
我需要将 AnsiString
转换为 Integer
。
var
param: AnsiString;
num: Integer;
begin
if TryStrToInt(param, num) then
...
在 Unicode 之前的 Delphi 中,我会使用 TryStrToInt
函数,但在现代 Delphi 中只有它的 Unicode 版本,所以我收到这个警告:W1057 Implicit string cast from 'AnsiString' to调用时“字符串”。
我的问题是,如何在现代 Delphi 中正确转换 AnsiStrings 而不会收到编译器警告(并且不必过度地将字符串转换为 UnicodeString(text))
最佳答案
您有多种选择:
- 接受并拥护 Unicode。停止使用
AnsiString
。 - 使用到
string
的显式转换:TryStrToInt(string(param), num)
。 - 禁用警告 W1057。
- 通过调用
MultiByteToWideChar
自行执行从 ANSI 到 UTF-16 的转换。这不是一个严肃的选择,但如果您想启用 W1057,而不使用显式转换,那么剩下的就是它。
坦率地说,选项 1 是首选。如果您尝试在代码中坚持使用 AnsiString
,您将陷入无穷无尽的转换和警告的泥潭中。如果您需要 ANSI 编码的字符串,它很可能处于互操作边界。也许您正在读取或写入使用 ANSI 编码的文件。在互操作边界执行 ANSI 和 UTF-16 之间的转换。其余时间,对于您的内部代码,请使用 string
。
关于string - 如何在现代 Delphi 中将 AnsiString 转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19001292/