string - 如何在现代 Delphi 中将 AnsiString 转换为整数?

标签 string delphi unicode type-conversion

这与 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))

最佳答案

您有多种选择:

  1. 接受并拥护 Unicode。停止使用 AnsiString
  2. 使用到 string 的显式转换:TryStrToInt(string(param), num)
  3. 禁用警告 W1057。
  4. 通过调用 MultiByteToWideChar 自行执行从 ANSI 到 UTF-16 的转换。这不是一个严肃的选择,但如果您想启用 W1057,而不使用显式转换,那么剩下的就是它。

坦率地说,选项 1 是首选。如果您尝试在代码中坚持使用 AnsiString,您将陷入无穷无尽的转换和警告的泥潭中。如果您需要 ANSI 编码的字符串,它很可能处于互操作边界。也许您正在读取或写入使用 ANSI 编码的文件。在互操作边界执行 ANSI 和 UTF-16 之间的转换。其余时间,对于您的内部代码,请使用 string

关于string - 如何在现代 Delphi 中将 AnsiString 转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19001292/

相关文章:

delphi - OpenGL Delphi中的渲染错误

c# - 将日期时间从数据表转换为特定格式的字符串 C# ASP.NET

我可以在 C 中将数字常量与字符串连接起来吗?

python - Python 标点符号替换

linux - Indy 10 TCPServer 不与 Linux 上连接的客户端通信

windows - 为什么这个错误会一直扰乱 XE2 IDE 工具栏?

php - 如何从 HTML 注释标签中删除缩进或空格?

java - 什么是需要 UTF-16 代理项对的好的 Unicode 代码点?

java - 虽然 write() 中将 byteval 声明为整数,但为什么 Java I/O 流中只将低位八位写入文件

unicode - Unicode NFC 规范化可以增加字符串的长度吗?