我有两个函数,一个用于加密,另一个用于解密字符串,使用Ord()函数。除扩展的Ascii代码外,它的效果都很好。
如果我使用字母ê(Ascii代码136),则Ord()函数将返回234,而我期望它会返回136。
如果对加密的字符串进行解密,则得到的结果与原始字符串的结果不同,ê变成j。
有人可以帮忙解决此问题吗?
procedure TForm1.btnEncryptClick(Sender: TObject);
var
sTempString : string;
iIndex,
i: integer;
begin
sTempString := edtOriginalString.Text ;
for iIndex := 1 to length(sTempString) do
begin
i := ord(sTempString[iIndex]);
i := i shl 1;
sTempString[iIndex] := Char(i);
end;
edtEncryptedString.Text := sTempString;
end;
procedure TForm1.btnDecryptClick(Sender: TObject);
var
sTempString : string;
iIndex,
i : integer;
begin
sTempString := edtEncryptedString.Text ;
for iIndex := 1 to length(sTempString) do
begin
i := ord(sTempString[iIndex]);
i := i shr 1;
sTempString[iIndex] := char(i);
end;
edtDecryptedString.Text := sTempString;
end;
如果我使用字母ê(Ascii代码136)
不,这实际上是错误的。 ASCII仅包含127个字符。
但是,ê是Unicode字符U + 00EA:带圆圈的拉丁文小写字母E。
并且EA(十六进制)的确是234(十进制)。
Delphi字符和字符串在Delphi 2009之前为8位,在Delphi 2009及更高版本中为Unicode。
因此,在您的情况下,Delphi 6是一个8位字符。
因此,您的左移将使您失去最高位,并且您不可能希望将其恢复原状。