谁能帮忙把这段 php 代码转换成 delphi ?谢谢。

wealsh 2009-01-05 01:25:11
<?
/*
作者:gyh
邮箱:pygyh@qq.com
QQ:64125904
*/
function SingleDecToHex($dec)
{
$tmp=”";
$dec=$dec%16;
if($dec<10) return $tmp.$dec;
$arr=array(”A”,”B”,”C”,”D”,”E”,”F”);
return $tmp.$arr[$dec-10];
}
function SetToHexString($str)
{
if(!$str) return false;
$tmp=”";
for($i=0;$i<strlen($str);$i++)
{
$ord=ord($str[$i]);
$tmp.=SingleDecToHex(($ord-$ord%16)/16);
$tmp.=SingleDecToHex($ord%16);
}
return $tmp;
}
function qianqian_code($str)
{
$s=strtolower($str);
$s=str_replace(” “,”",$s);
$s=str_replace(”‘”,”",$s);
return SetToHexString(iconv(’GBK’,'UTF-16LE’,$s));}

function conv($num)
{
$tp = bcmod($num,4294967296);

if(bccomp($num,0)>=0 && bccomp($tp,2147483648)>0)
$tp=bcadd($tp,-4294967296);
if(bccomp($num,0)<0 && bccomp($tp,2147483648)<0)
$tp=bcadd($tp,4294967296);

return $tp;
}
function CodeFunc($Id,$artist,$title)
{
$Id=(int)$Id;
$utf8Str=SetToHexString(iconv(’GBK’,'UTF-8′,$artist.$title));

$length=strlen($utf8Str)/2;
for($i=0;$i<=$length-1;$i++)
eval(’$song['.$i.'] = 0x’.substr($utf8Str,$i*2,2).’;');

$tmp2=0;
$tmp3=0;

$tmp1 = ($Id & 0×0000FF00) >> 8; //右移8位后为0×0000015F
//tmp1 0×0000005F
if ( ($Id & 0×00FF0000) == 0 ) {
$tmp3 = 0×000000FF & ~$tmp1; //CL 0×000000E7
} else {
$tmp3 = 0×000000FF & (($Id & 0×00FF0000) >> 16); //右移16位后为0×00000001
}
$tmp3 = $tmp3 | ((0×000000FF & $Id) << 8); //tmp3 0×00001801
$tmp3 = $tmp3 << 8; //tmp3 0×00180100
$tmp3 = $tmp3 | (0×000000FF & $tmp1); //tmp3 0×0018015F
$tmp3 = $tmp3 << 8; //tmp3 0×18015F00
if ( ($Id & 0xFF000000) == 0 ) {
$tmp3 = $tmp3 | (0×000000FF & (~$Id)); //tmp3 0×18015FE7
} else {
$tmp3 = $tmp3 | (0×000000FF & ($Id >> 24)); //右移24位后为0×00000000
}

$i=$length-1;
while($i >= 0){
$char = $song[$i];
if($char >= 0×80) $char = $char - 0×100;

$tmp1 = ($char + $tmp2) & 0×00000000FFFFFFFF;
$tmp2 = ($tmp2 << ($i%2 + 4)) & 0×00000000FFFFFFFF;
$tmp2 = ($tmp1 + $tmp2) & 0×00000000FFFFFFFF;
$i -= 1;
}

$i=0;
$tmp1=0;
while($i<=$length-1){
$char = $song[$i];
if($char >= 128) $char = $char - 256;
$tmp7 = ($char + $tmp1) & 0×00000000FFFFFFFF;
$tmp1 = ($tmp1 << ($i%2 + 3)) & 0×00000000FFFFFFFF;
$tmp1 = ($tmp1 + $tmp7) & 0×00000000FFFFFFFF;

$i += 1;
}

$t = conv($tmp2 ^ $tmp3);
$t = conv(($t+($tmp1 | $Id)));
$t = conv(bcmul($t , ($tmp1 | $tmp3)));
$t = conv(bcmul($t , ($tmp2 ^ $Id)));

if(bccomp($t , 2147483648)>0)
$t = bcadd($t ,- 4294967296);
return $t;}

$artist=”张韶涵”;
$title=”床边故事”;
$doc = new DOMDocument();
$doc->load(”http://lrccnc.ttplayer.com/dll/lyricsvr.dll?sh?Artist=”.qianqian_code($artist).”&Title=”.qianqian_code($title).”&Flags=0″);
echo “http://lrccnc.ttplayer.com/dll/lyricsvr.dll?sh?Artist=”.qianqian_code($artist).”&Title=”.qianqian_code($title).”&Flags=0″;
echo “<pre>”;
$lrcNode = $doc->getElementsByTagName(”lrc”);
foreach($lrcNode as $lrc)
{
$id=$lrc->getAttribute(”id”);
$artist=iconv(’UTF-8′,’GBK’,$lrc->getAttribute(”artist”));
$title=iconv(’UTF-8′,’GBK’,$lrc->getAttribute(”title”));
$code=CodeFunc($id,$artist,$title);
$lrcstr=iconv(’UTF-8′,’GBK’,file_get_contents(”http://lrccnc.ttplayer.com/dll/lyricsvr.dll?dl?Id=”.$id.”&Code=”.$code));
echo “http://lrccnc.ttplayer.com/dll/lyricsvr.dll?dl?Id=”.$id.”&Code=”.$code;
echo $lrcstr.”<br/>”;
break;
}
echo “</pre>”;

?>

...全文
168 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
shuihan20e 2009-02-01
  • 打赏
  • 举报
回复
一个函数吧?
mathsfan 2009-02-01
  • 打赏
  • 举报
回复
不会...
jin20000 2009-02-01
  • 打赏
  • 举报
回复
看着有点晕
李_军 2009-01-17
  • 打赏
  • 举报
回复
你直接说需要什么功能,这样能快点,第一个函数直接用intToHex就可以了
dh9450 2009-01-07
  • 打赏
  • 举报
回复
function SingleDecToHex(dec:integer):string;
var
tmp:string;
arr:string;
begin
if (dec mod 16) < 10 then
begin
Result:=tmp+format('%d',[dec]);
end
else
begin
arr:='ABCDEF';
Result:=tmp + arr[dec-10]
end;
end;
qiume 2009-01-07
  • 打赏
  • 举报
回复
发到PHP版效果会好些......

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧