こんにちは、私はハッシュアルゴリズムを作成しているので、PHP から C++ に書き直しています。しかし、C++ の結果は php の結果とは異なります。PHP の結果には 10 文字を超える文字が含まれていますが、C++ の結果には 6 ~ 8 文字しか含まれていません。しかし、PHP の結果の最後の 8 文字は C++ の結果と同じです。だからここにPHPコードがあります:
<?php function JL1($text) {
$text.="XQ";
$length=strlen($text);
$hash=0;
for($j=0;$j<$length;$j++) {
$p=$text[$j];
$s=ord($p);
if($s%2==0) $s+=9999;
$hash+=$s*($j+1)*0x40ACEF*0xFF;
}
$hash+=33*0x40ACEF*0xFF;
$hash=sprintf("%x",$hash);
return $hash; } ?>
そしてここに C++ コード:
char * JL1(char * str){
int size=(strlen(str)+3),s=0; //Edit here (+2 replaced with +3)
if(size<=6) //Edit here (<9 replaced with <=6)
size=9;
char *final=new char[size],temp;
strcpy(final,str);
strcat(final,"XQ");
long length=strlen(final),hash=0L;
for(int i=0;i<length;i++){
temp=final[i];
s=(int)temp;
if(s%2==0)s+=9999;
hash+=((s)*(i+1)*(0x40ACEF)*(0xFF));
}
hash+=33*(0x40ACEF)*(0xFF);
sprintf(final,"%x",hash); //to hex string
final[8]='\0';
return final; }
単語に対する C++ の結果の例: "Hi!" : 053c81be この単語に対する PHP の結果: 324c 053c81be
その間違いはどこにあり、それを修正する方法は、phpであろうとcppコードであろうと、誰にも分かりますか? ちなみに、PHP の結果の最初の文字を切り取ると、C++ の結果が得られますが、C++ の結果は 8 文字である必要はなく、場合によっては 6 文字になることがあるため、役に立ちません。