У меня есть оператор сравнения для дерева итерации. Он использует переменные AnsiString. Моя проблема в том, что, когда значения кажутся равными, я не получаю равный показатель (ака не получает 0 из System.AnsiStrings.CompareStr). Я просмотрел свои переменные через debbugger и прошел через мой код. Обе переменные - AnsiStrings, оба значения одинаковы, и пробелов нет. CompareStr возвращает -65, если это помогает.Delphi - AnsiString не равны, но не знаю, почему
Что я могу быть видом? Вот мой код.
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 может быть индикатором, когда возникает такая ситуация ... – user1009073
Ввод, скорее всего, был выполнен с помощью 'UnicodeString', а затем преобразован в' AnsiString', поэтому данные, вероятно, «появились», похожие на человеческий глаз, но на самом деле совсем другие память, которую будет замечать 'CompareStr()'. Недостаточно взглянуть на строковые значения в отладчике, вам нужно посмотреть на необработанные байты. Разница в 65 означает, что вы имеете дело с символами ANSI вне диапазона ASCII. –