Delphi 7和Delphi Tokyo-不同的结果具有相同的功能

时间:2018-09-12 14:52:37

标签: delphi pascal

我正在将用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 :(得分:1)

从Delphi 2009开始,string类型自动映射到与Unicode兼容的UnicodeString类型。以前,它映射为AnsiString类型。

您可以通过使用AnsiStringAnsiChar来不变地使用例程。

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字符集的Unicode字符,则这可能会在运行时导致意外结果。