<?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