我要将一个C语言的简单内加密算法用的Delphi重写,其中有两个地方编译不过去大家帮帮忙!
C中的函数
void InitPassword(char *Key, int num)
{
int i,j,k;
for(i=0;i<4;i++)
{
for(j=0;j<256;j++)
{
S[i][j]=def_S[i][j];
}
}
k=0;
for(i=0;i<18;i++)
{
unsigned int temp=0;
for(j=0;j<4;j++)
{ temp=temp | Key[k];
temp<<=8;
k++;
if(k>=num)
{
k=0;
}
}
P[i]=def_P[i] ^ temp;
}
unsigned long tl=0,tr=0;
for(i=0;i<18;i+=2)
{
encipher(&tl,&tr);
P[i]=tl;
P[i+1]=tr;
}
for(i=0;i<4;i++)
{
for(j=0;j<256;j+=2)
{
encipher(&tl,&tr);
S[i][j]=tl;
S[i][j+1]=tr;
}
}
}
我改的Delphi中的函数
procedure TCompress.InitPassword(Key: PChar; num: integer);
var i,j,k : integer;
temp : Cardinal;
tl,tr : Cardinal;
begin
inherited;
for i := 0 to 3 do
begin
for j := 0 to 255 do
begin
S[i][j] := def_S[i][j];
end;
end;
k := 0;
for i := 0 to 17 do
begin
temp := 0;
for j := 0 to 3 do
begin temp := temp or Key[k];
temp := temp shr 8;
k := k + 1;
if k >= num then
begin
k:=0;
end;
end;
P[i] := def_P[i] xor temp;
end;
tl := 0;
tr := 0;
i := 0;
while i < 18 do
begin
encipher(@tl,@tr);
p[i] := tl;
p[i + 1] := tr;
i := i + 2;
end; for i := 0 to 3 do
begin
j := 0;
while j < 256 do
begin
encipher(@tl,@tr);
S[i][j] := tl;
S[i][j+1] := tr;
j := j + 2;
end;
end;
end;其中temp := temp or Key[k];编译不过 提示Operator not applicable to this operand type请高人指点!
C中的函数
void InitPassword(char *Key, int num)
{
int i,j,k;
for(i=0;i<4;i++)
{
for(j=0;j<256;j++)
{
S[i][j]=def_S[i][j];
}
}
k=0;
for(i=0;i<18;i++)
{
unsigned int temp=0;
for(j=0;j<4;j++)
{ temp=temp | Key[k];
temp<<=8;
k++;
if(k>=num)
{
k=0;
}
}
P[i]=def_P[i] ^ temp;
}
unsigned long tl=0,tr=0;
for(i=0;i<18;i+=2)
{
encipher(&tl,&tr);
P[i]=tl;
P[i+1]=tr;
}
for(i=0;i<4;i++)
{
for(j=0;j<256;j+=2)
{
encipher(&tl,&tr);
S[i][j]=tl;
S[i][j+1]=tr;
}
}
}
我改的Delphi中的函数
procedure TCompress.InitPassword(Key: PChar; num: integer);
var i,j,k : integer;
temp : Cardinal;
tl,tr : Cardinal;
begin
inherited;
for i := 0 to 3 do
begin
for j := 0 to 255 do
begin
S[i][j] := def_S[i][j];
end;
end;
k := 0;
for i := 0 to 17 do
begin
temp := 0;
for j := 0 to 3 do
begin temp := temp or Key[k];
temp := temp shr 8;
k := k + 1;
if k >= num then
begin
k:=0;
end;
end;
P[i] := def_P[i] xor temp;
end;
tl := 0;
tr := 0;
i := 0;
while i < 18 do
begin
encipher(@tl,@tr);
p[i] := tl;
p[i + 1] := tr;
i := i + 2;
end; for i := 0 to 3 do
begin
j := 0;
while j < 256 do
begin
encipher(@tl,@tr);
S[i][j] := tl;
S[i][j+1] := tr;
j := j + 2;
end;
end;
end;其中temp := temp or Key[k];编译不过 提示Operator not applicable to this operand type请高人指点!
解决方案 »
- 一个C转换的问题
- 如何使Memo只能输入 固定字符如(A,B,C,D..)但也可使粘贴复制的快捷键??
- listview让列自动适应字段宽度?
- 在adoquery中sql属性中执行update语句,怎样知道执行结果?
- 使用WINDOWSMEDIAPLAYER(WMP)控件后程序有退出错误,哪位高手遇到过?
- delphi怎么控制excel单元格字体的风格(粗体或斜体阿)
- Table日期类型的过滤条件出错!
- 不定字段查询语句怎么写?
- 最近做了一个,淘宝自动发货软件,自动发卡,自动评价,(E速达)欢迎大家提提意见
- 再请教哪里能DOWN 那个 report builder pro for D5 (rpb..) ??
- aiirii(ari-爱的眼睛) 请进! 100$$
- 急需Delphi 6 企业版最新service pack!!!!
C中, Key[K], 比較靈活, 可當成一個 byte, 或一個 char;pascal 中, 就是char 而已,
你要操作, 就只能用 ord 轉成一個byteReturns the ordinal value of an ordinal-type expression.