我正在将用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;
答案 0 :(得分:1)
从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字符,则这可能会在运行时导致意外结果。