美好的一天,我正在制作我的哈希算法,所以我正在将它从 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 个字符长。