Roy*_*ver 2 delphi unicode warnings
在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;
Run Code Online (Sandbox Code Playgroud)
其中txt是一个字符串.这在D2007中工作正常,但会在D2009和D2010中发出警告我不知道为什么但是有什么方法可以让它在D2009和D2010中没有警告的情况下工作吗?
Roy M Klever
你是否在设置表达式中将"WideChar缩减为字节字符.考虑在'SysUtils'单元中使用'CharInSet'函数"消息?
这是问题所在.在D2009中,默认字符串类型已从AnsiString更改为UnicodeString.AnsiString为每个字符使用一个字节,为您提供256个可能的字符.UnicodeString每个字符使用2个字节,最多可提供64K个字符.但Pascal集最多只能包含256个元素.所以它不能创建一组"WideChar",因为有太多可能的元素.
警告是一个警告,您试图将txt [n](一个来自Unicode字符串的WideChar)与一组字符进行比较.它不能创建一组WideChars,所以它必须将它们减少到AnsiChars以使它们适合Pascal集,并且你的txt [n]可能完全在Ansi边界之外.
您可以使用CharInSet或将txt设为AnsiString来修复它,如果您确定不需要任何Unicode字符.或者,如果这不会很好,你可以禁用警告,但我认为这是最后的手段.
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |