兄弟姐妹们,帮帮忙,将下面这两个C++函数转换为delphi的过程。谢谢!(100分)

  • 主题发起人 gaoyongming
  • 开始时间
G

gaoyongming

Unregistered / Unconfirmed
GUEST, unregistred user!
void cipher_str(char * cipher,int length, unsigned char * passwd)
/*将长度为length*2的字符串转换为16进制串*/
{
int i, k1, k2;
char hex[3], chmap[17]="0123456789abcdef";
memset(passwd,0,length);
for( i = 0;
i < length;
i++ )
{
hex[0] = cipher[i*2];
hex[1] = cipher[i*2+1];
for( k1=0;
k1<16;
k1++ )
if( chmap[k1]==hex[0] )
break;
for( k2=0;
k2<16;
k2++ )
if( chmap[k2]==hex[1] )
break;
*(passwd+i)= (unsigned char)(k1*16+k2);
}
*(passwd+i)='/0';
}
void chg_cip(unsigned char * passwd, int length)
/*口令加密*/
{
int i;
unsigned char temp;
for( i = 0;
i < length;
i++)
{
temp = 0;
passwd = ~passwd;
temp = passwd;
passwd = passwd/16;
temp = temp & 0x0f;
temp = temp*16;
passwd = temp + passwd;
}
}
将上面两个C++函数转换为delphi的过程!谢谢
 
没人会吗? 在线等!
 
没人会吗?
 
这个不难,给你指导一下:
void cipher_str(char * cipher,int length, unsigned char * passwd)
/*将长度为length*2的字符串转换为16进制串*/
{
int i, k1, k2;//相当于integer变量
char hex[3], chmap[17]="0123456789abcdef";//字符数组
memset(passwd,0,length);//调用了个内存分配函数
for( i = 0;
i < length;
i++ )//相当于for i:=0 to lengthdo
{
hex[0] = cipher[i*2];//数组的运算,把cipher每一个元素*2后赋给hex[0]
hex[1] = cipher[i*2+1];//同理
for( k1=0;
k1<16;
k1++ )//见上
if( chmap[k1]==hex[0] ) //判断两个是否相等
break;//如果相等退出for循环,和delphi的break一样
for( k2=0;
k2<16;
k2++ )
if( chmap[k2]==hex[1] )
break;//见上
*(passwd+i)= (unsigned char)(k1*16+k2);//由于使用了指针,这里是把*(passwd+i)的地址赋给了无符号的字符指针
}
*(passwd+i)='/0';//设置为空
}
void chg_cip(unsigned char * passwd, int length)
/*口令加密*/
{
int i;
unsigned char temp;
for( i = 0;
i < length;
i++)
{
temp = 0;
passwd = ~passwd;//取反操作
temp = passwd;
passwd = passwd/16;//整除以16
temp = temp & 0x0f;//按位与操作
temp = temp*16;
passwd = temp + passwd;
}
}
时间紧迫,没有帮你直接翻译,见谅!
 
上面的语句每句我知道是什么意思。为什么我翻译成下面的代码还是不行呢?
procedure cipher_str(cipher :pchar length:integer;var passwd:array of byte)
var
i,k1,k2:integer;
hex : array [0..2] of char;
const chmap :array [0..15] of char = ('0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f');
begin
fillchar(passwd,8,0);
for i := 0 to length - 1do
begin
hex[0] := cipher[i*2];
hex[1] := cipher[i*2+1];
for k1 := 0 to 15do
if chmap[k1] = hex[0] then
break;
for k2 := 0 to 15do
if chmap[k2] = hex[1] then
break;
passwd := byte(k1*16 + k2)
end;
end;

//数据加密
procedure chg_cip(var passwd:array of byte;len: Integer);
var
i: Integer;
temp:byte;
begin
for i:=0 to len-1do
begin
passwd:=not passwd;
temp:= passwd;
passwd:= passwd div 16;
temp:= temp and $0F;
temp:= temp*16;
passwd:=temp+ passwd
end;
end;
 
我们翻译一个程序,主要是看他的实现的思路,而不是单纯的去翻译语言!C语言非常灵活,直接翻译肯定出错,比如指针,他表示了数据的地址,而不是实际值,指针数组表示该数组某一个元素的地址,直接翻译为delphi就会错误
 

Similar threads

顶部