2012-12-04 137 views
0

我目前正在开发一个将VB6代码转换为PHP的项目,我需要一些帮助。我想知道我的校验和函数的转换是否正确,因为我得到的值根本不准确。将VB6代码转换为PHP转换

VB6代码:

Function CheckSum(St As String) As Long 
Dim A As Long, B As Long 
For A = 1 To Len(St) 
    B = B + Asc(Mid$(St, A, 1)) 
Next A 
CheckSum = B 
End Function 

TO

PHP代码:

Function CheckSum($st) 
{ 

For($a=0; $a<Count($st); $a++) 
{ 
$B = $B + SubStr($st,$a,1); 
} 
return $B; 
} 

整个PHP代码:

Function CheckSum($st) 
{ 

For($a=0; $a<Count($st); $a++) 
{ 
$B = $B + SubStr($st,$a,1); 
} 
return $B; 
} 

Function DoubleChar($num) 
{ 
$DoubleChar = Chr(IntVal($num/256)) + Chr($num % 256); 
Return $DoubleChar; 
} 

$host = '127.0.0.1'; 
$port = 7973; 
$waitTimeoutInSeconds = 1; 
if($fp = fsockopen($host,$port,$errCode,$errStr,$waitTimeoutInSeconds)) 
{ 
$getplayers = DoubleChar(Chr(35)) + Chr(CheckSum(Chr(35)) * 20 % 194) + Chr(0) + Chr(35); 
if(fwrite($fp, $getplayers)): 
while (!feof($fp)) 
{ 
    $buffer = fread($fp, 256); 
echo IntVal($buffer); 
} 
endif; 
} else { 
echo "ERROR: $errno - $errstr<br />\n"; 
} 
fclose($fp); 
+0

使用小写:“功能... “而不是”功能...“ – Phorce

回答

1

VisualBasic checksum您发布的代码对字符串st的每个字符进行操作,并将其转换为与其等效的Ansi代码(Asc()函数)。此外,VB代码使用Len()函数对字符串进行操作,而您的PHP代码使用count()函数,该函数对数组进行操作。

为了实现相同的结果在PHP中,你需要使用类似的功能ord()strlen()如让你的校验功能看起来是这样的:

function CheckSum($st) 
{ 
    for($a=0; $a<strlen($st); $a++) 
    { 
     $B = $B + ord(substr($st,$a, 1)); 
    } 
    return $B; 
} 
+0

谢谢你! – Moulijin

2

我会想知道我的校验和转换是否正确,因为我得到的价值根本不准确。

如果结果不匹配 - 则转换不正确。

+0

如果仔细阅读,从VB6到PHP – Moulijin

+2

@ user765071:那又如何?你问过转换是否正确 - 我回答说:不是,这是不正确的。 – zerkms

+0

使它更清晰。请参见粗体。 – Moulijin