Delphi 7 и Delphi Tokyo - разные результаты одна и та же функция - PullRequest
0 голосов
/ 12 сентября 2018

Я конвертирую старый проект, написанный на Delphi 7, в новейшую версию (Delphi Tokyo). В старом коде есть эта функция, которая шифрует и расшифровывает текст, но когда я читаю зашифрованный текст с помощью той же программы, скомпилированной в Delphi Токио просто производит мусор.

Кто-нибудь здесь знает, почему один и тот же код ведет себя и дает разные результаты, скомпилированные с разными версиями Delphi?

Вот функция:

function TForm2.EnDeCrypt(const Value : String) : String;
var
  CharIndex : integer;
begin
  Result := Value;
  for CharIndex := 1 to Length(Value) do
    Result[CharIndex] := chr(not(ord(Value[CharIndex])));
end; 

1 Ответ

0 голосов
/ 13 сентября 2018

Начиная с Delphi 2009, тип string автоматически сопоставляется с Unicode-совместимым типом UnicodeString.Ранее он соответствовал типу AnsiString.

Вы можете использовать свою процедуру без изменений, явно используя AnsiString и AnsiChar.

function TForm2.EnDeCrypt(const Value : AnsiString) : AnsiString;
var
  CharIndex : integer;
begin
  Result := Value;
  for CharIndex := 1 to Length(Value) do
    Result[CharIndex] := AnsiChar(not(ord(Value[CharIndex])));
end; 

Обратите внимание, что это может привести к неожиданным результатам.во время выполнения, если строка, переданная функции, содержит символы Юникода, которые не могут быть сопоставлены с локальным набором символов ANSI.

...