为什么我的算法反转字符值在存储在Delphi XE2 ShortString中时不起作用?

Moo*_*ore 0 delphi unicode

我有以下代码:

user_s.username := EnDecrypt(Edit_username.Text);
Run Code Online (Sandbox Code Playgroud)

功能如下:

function 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;
Run Code Online (Sandbox Code Playgroud)

变量的类型是:

TUser = record
 access: char;
 username: string[25];
 password: string[25];
end;
Run Code Online (Sandbox Code Playgroud)

在Delphi 2007中它可以工作,在Delphi XE2中它失败了.奇怪的是,如果它是123456789,它会很好地加密/解密密码.这个问题必须与unicode和shortstring的使用有关.我希望有一些方法可以让它在Delphi XE2中运行..

And*_*and 6

更换String同型号AnsiString,并CharAnsiChar和代码将工作完全在德尔福2007年(String[25]不应该被改变,虽然.)当然,你不会得到Unicode支持.