【发布时间】:2023-03-05 14:56:01
【问题描述】:
我有一个 Tree 迭代的比较运算符。它使用 AnsiString 变量。我的问题是,当值看起来相等时,我没有得到相等的指示符(也就是没有从 System.AnsiStrings.CompareStr 得到 0)。我已经通过调试器查看了我的变量并单步执行了我的代码。两个变量都是 AnsiStrings,都是相同的值,并且没有空格。如果有帮助,CompareStr 返回 -65。
我可以忽略什么?这是我的代码。
function CompareNodes(idVal: pointer; ANode: TALStringKeyAVLBinaryTreeNode): Integer;
var
Key1, Key2: AnsiString;
begin
Key1 := PAnsiString(idVal)^;
Key2 := ANode.ID;
Result := System.AnsiStrings.CompareStr(Key1, Key2);
end;
【问题讨论】:
-
这里不足以重现问题。
-
找到我的答案....不知何故,一个字符串被用于输入,而不是 AnsiString。当这种情况发生时,-65 可能是一个指标......
-
输入很可能是用
UnicodeString完成的,然后转换为AnsiString,因此数据可能“看起来”类似于人眼,但实际上在记忆中完全不同,CompareStr()会注意。在调试器中查看字符串值是不够的,您必须查看原始字节。 65 的差异可能意味着您正在处理 ASCII 范围之外的 ANSI 字符。 -
您的字符串不同 - 就这么简单。请记住
CompareStr也要求大小写相同。使用CompareText进行不区分大小写的比较。如果您仍在苦苦挣扎,我对同一问题的回答将告诉您如何找出不同之处:stackoverflow.com/a/24390357/224704
标签: delphi ansistring