Delphi ORD函数未返回期望值

问题描述 投票:0回答:1

我有两个函数,一个用于加密,另一个用于解密字符串,使用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;

Front-end results

delphi
1个回答
1
投票

如果我使用字母ê(Ascii代码136)

不,这实际上是错误的。 ASCII仅包含127个字符。

但是,ê是Unicode字符U + 00EA:带圆圈的拉丁文小写字母E。

并且EA(十六进制)的确是234(十进制)。


Delphi字符和字符串在Delphi 2009之前为8位,在Delphi 2009及更高版本中为Unicode。

因此,在您的情况下,Delphi 6是一个8位字符。

因此,您的左移将使您失去最高位,并且您不可能希望将其恢复原状。

© www.soinside.com 2019 - 2024. All rights reserved.