VB6代码转换为PHP

时间:2012-12-04 05:46:38

标签: php vb6

我目前正在开发一个将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

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);

2 个答案:

答案 0 :(得分:2)

  

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

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

答案 1 :(得分: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;
}