0

現在、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);
4

2 に答える 2

2

取得している値がまったく正確ではないため、チェックサムの変換が正しいかどうかを知りたいです。

結果が一致しない場合、変換は正しくありません。

于 2012-12-04T05:48:00.157 に答える
1

投稿したVisualBasicchecksumコードは、文字列 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;
}
于 2012-12-04T06:02:18.870 に答える