crc32算法php版----crc32.php

<?php
 $remainder = (int)0xFFFFFFFF;
$poly=(int)0x04C11DB7;


//$stringArray = array(0x68, 0x65);
$stringArray = array("h","e");


//$string = "h";
//$hex = bin2hex($string);
//echo $hex; // 输出: 68
//$string = "h";
//$hex = ord($string);
//echo $hex; // 输出: 104!!!



function reverseBits($n) {
    $result = $n & 0xff;
    //echo "<br> reverseBits \$n= ".$result."<br>";
    $result2=0x0 & 0xff;
    for ($i = 0; $i < 8; $i++) {
    $result1 = ($result2 << 1) &0xff;
    //echo "<br> result1= ".$result1."<br>";    
    $n1=$n & 1<<$i;
    if($n1 !=0x0){
    $n2=0x1;
    }else {
    $n2=0x0;
    }
    //echo "<br> n2= ".$n2."<br>";
    $result2 = $result1 | $n2;
    //echo "<br> == ".$result2."<br>";
    }
    //echo "<br> reverseBits == ".$result2."<br>";
    return $result2;
}

//echo dechex(reverseBits(0x68));
//echo dechex(reverseBits(bin2hex("h")));
//echo dechex(reverseBits(ord("h")));

function reverseBits32($n) {
    $result = $n & 0xffffffff;
    //echo "<br> reverseBits \$n= ".dechex($result)."<br>";

    for ($i = 0; $i < 32; $i++) {
    $result1 = ($result2 << 1) &0xffffffff;
    //echo "<br> result1= ".$result1."<br>";    
    $n1=($n & 1<<$i) & 0xffffffffff;
    if($n1 !=0x0){
    $n2=0x1;
    }else {
    $n2=0x0;    // code...
    }
    //echo "<br> n2= ".$n2."<br>";
    $result2 = $result1 | $n2;
    //echo "<br> = ".$result2."<br>";
    }
    return $result2;
}
//echo "<br> reverseBits32==== ".dechex(reverseBits32(0x68000000));


foreach ($stringArray as $string) {
    //echo "<br>\$string".$string . "<br>";


    $stringhex= reverseBits(ord($string));

    //echo "<br> reverseBits ==== ".$stringhex;

    //echo "<br> \$stringhexx = ".dechex($stringhexx). "<br>";
    $stringhexx= ($stringhex << 24) & 0xFFFFFFFF; 

    $remainder = ($remainder^$stringhexx)& 0xFFFFFFFF;
    //echo "<br>".dechex($remainder) . "<br>";
    for($i=0;$i<8;$i++)  
    {

        //echo "<br> for begin \$remainder= ".dechex($remainder) . "<br>";
        if ($remainder & 0x80000000)
        {
        $remainder = ($remainder << 1 ) & 0xFFFFFFFF;
        //echo "<br> for if 1 <<1 =  ".dechex($remainder) . "<br>";
        $remainder =($remainder ^ $poly)& 0xFFFFFFFF;
        //echo "<br> for if 1 =".dechex($remainder) . "<br>";
        }else{
        $remainder = ($remainder << 1 ) & 0xFFFFFFFF;
        //echo "<br> for if 2 <<1 =".dechex($remainder) . "<br>";        

        }
    }
    
    echo "<br>\$string =".$string . "<br>"; 

    $remainder= reverseBits32($remainder);


//echo "<br>".$remainder;
//echo "<br> not xor= ".dechex($remainder);

    $remainder=($remainder^0xFFFFFFFF);

    echo "<br> xor =".dechex($remainder);
}



echo "<br>========".dechex($remainder); 

?>


<?php
echo "<br>";
$str1 = crc32("h");
printf("crc32(\"h\")=%8x",$str1);
echo "<br>";
$str2 = crc32("he");
printf("crc32(\"he\")=%8x ",$str2);//jieguo:
?>


crc32("h")=916b06e7
crc32("he")=d1256687 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值