【问题标题】:Converting a string to Cardinal / UInt32将字符串转换为 Cardinal / UInt32
【发布时间】:2021-01-22 09:13:01
【问题描述】:

我需要将字符串转换为无符号 32 位整数 (Cardinal)。

System.SysUtils 单元中有很多有用的功能,例如:

  • StrToInt
  • StrToInt64
  • StrToUInt64

但我找不到任何StrToCardinalStrToUIntStrToUInt32 函数。

【问题讨论】:

  • 为什么需要一个?为什么:= StrToInt() 对你来说还不够?你遇到过实际问题吗?也没有StrToWord()StrToByte()...
  • @AndreasRejbrand:在我的System.SysUtils(DelphiXE7)中找不到,它是如何实现的?
  • @AmigoJack:我知道,但我必须使用 Cardinal 值(即:PID)
  • @Fabrizio:我怀疑这一点。它只是将字符串转换为 64 位整数,检查它是否在基数范围内,如果是则强制转换,如果不是则引发异常。这是一个微不足道的三班轮。

标签: delphi type-conversion delphi-xe7


【解决方案1】:

要遵循作为评论发布的 Andreas Rejbrand 想法,我建议这样做:

function StrToCardinal(const S : String) : Cardinal;
var
    I64 : UInt64;
begin
    I64 := StrToUInt64(S);
    if (I64 shr 32) <> 0 then
        raise EConvertError.Create('StrToCardinal invalid value');
    Result := Cardinal(I64);
end;

【讨论】:

  • @AmigoJack:OP 在 Q 中说 StrToUInt64 存在。这是列表中的第三个项目符号。
  • @DavidHeffernan:恐怕我不太明白你给出那个链接的意思。 OP 已经说过该功能存在于 XE7 中,并且指向悉尼文档的链接并没有说明 XE7 中的情况。也许您的意思是 (1) 提供链接 docwiki.embarcadero.com/Libraries/XE7/en/… 和 (2) 将评论发送给 AmigoJack?
  • @AmigoJack 我用 D10.4.1 测试了我的代码,OP 说 StrToUInt64 在 XE7 时间已经存在。
猜你喜欢
  • 2017-02-01
  • 2019-11-15
  • 1970-01-01
  • 2011-05-17
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 2019-07-15
  • 2013-06-16
相关资源
最近更新 更多