gpt4 book ai didi

Delphi,如何避免D2009、D2010中的unicode警告信息

转载 作者:行者123 更新时间:2023-12-03 18:01:04 24 4
gpt4 key购买 nike

在 Delphi 2007 的排序例程中,我使用如下代码:

(txt[n] in ['0'..'9'])

function ExtractNr(n: Integer; var txt: String): Int64;
begin
while (n <= Length(txt)) and (txt[n] in ['0'..'9']) do n:= n + 1;
Result:= StrToInt64Def(Copy(txt, 1, (n - 1)), 0);
Delete(txt, 1, (n - 1));
end;

其中 txt 是一个字符串。这在 D2007 中工作正常,但会在 D2009 和 D2010 中发出警告我不知道为什么,但有什么方法可以让它在 D2009 和 D2010 中没有警告的情况下工作?

罗伊·克莱弗

最佳答案

您是否收到“WideChar 减少为集合表达式中的字节 Char。考虑在‘SysUtils’单元中使用‘CharInSet’函数”消息?

问题来了。在 D2009 中,默认字符串类型从 AnsiString 更改为 UnicodeString。 AnsiString 为每个字符使用一个字节,为您提供 256 个可能的字符。 UnicodeString 每个字符使用 2 个字节,最多可提供 64K 个字符。但是一个 Pascal 集最多只能包含 256 个元素。所以它不能创建“一组 WideChar”,因为可能的元素太多了。

该警告是一个警告,表明您正在尝试将 txt[n](Unicode 字符串中的 WideChar)与一组字符进行比较。它无法制作一组 WideChars,因此必须将它们缩减为 AnsiChars 以将它们放入 Pascal 集中,并且您的 txt[n] 可能完全超出 Ansi 边界。

如果您确定不需要任何 Unicode 字符,您可以使用 CharInSet 或将 txt 设为 AnsiString 来修复它。或者,如果这样做效果不佳,您可以禁用警告,但我认为这是最后的手段。

关于Delphi,如何避免D2009、D2010中的unicode警告信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2256001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com