200分急求解,翻译VC++代码为Delphi代码,关于字符转换的。 ( 积分: 200 )

  • 主题发起人 moonight
  • 开始时间
M

moonight

Unregistered / Unconfirmed
GUEST, unregistred user!
void CMyProgram::ChangeHash(CString str,BYTE bDes[])
{
CString szResult;
char szBuf[2];
szResult=CMD5::GetMD5((BYTE *)(const char*)str,str.GetLength());

UINT nBuf=0;
for(int i=0;i<16;i++)
{
szBuf[0]=szResult.GetAt(i*2);
szBuf[1]=szResult.GetAt(i*2+1);
sscanf(szBuf,&quot;%x&quot;,&amp;nBuf);
bDes=nBuf;
}
}

以上函数目的是为了将MD5生成的32个字符两位两位地取出并作为16进制数看待,将其转为相应的ASCII字符然后再合成为一个字符串(就变成16位的字符串了)。

只要能正确编译执行,并且结果正确,就送分。
 
void CMyProgram::ChangeHash(CString str,BYTE bDes[])
{
CString szResult;
char szBuf[2];
szResult=CMD5::GetMD5((BYTE *)(const char*)str,str.GetLength());

UINT nBuf=0;
for(int i=0;i<16;i++)
{
szBuf[0]=szResult.GetAt(i*2);
szBuf[1]=szResult.GetAt(i*2+1);
sscanf(szBuf,&quot;%x&quot;,&amp;nBuf);
bDes=nBuf;
}
}

以上函数目的是为了将MD5生成的32个字符两位两位地取出并作为16进制数看待,将其转为相应的ASCII字符然后再合成为一个字符串(就变成16位的字符串了)。

只要能正确编译执行,并且结果正确,就送分。
 
咋就没人帮忙呢
 
function HexToData(const s: String): String;
var
i: Integer;
begin
SetLength(Result, (Length(s)+1) div 2);
for i := 1 to Length(Result) do
begin
Result := Chr(StrToIntDef('$'+Copy(s, i*2-1, 2),0));
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
ShowMessage(HexToData('313233343536'));
//
end;
 
这个函数不限制源数据的长度, 32个字符也没问题
 
Function ChangeHash(str:string):string;
var
i: Integer;
szResult:string;
begin
//
szResult:= GetMD5(PByteArray(str),Length(str));

SetLength(Result, (Length(szResult)+1) div 2);

for i := 1 to Length(Result) do
begin
Result := Chr(StrToIntDef('$'+Copy(szResult, i*2-1, 2),0));
end;

end;
 
先谢谢二位,试试看先
 
谢谢二位,我用了Lich的方法,所以lich多加点,sonican不要生气哈
 

Similar threads

顶部