我正在将一个用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;
从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字符集的unicode字符,则可能会在运行时导致意外结果。