PHP的ip2long和long2ip函數的實現原理
最近要做個十進製數字的可逆轉換做邀請碼,一直沒搞清楚怎麼弄的,實在太複雜了,今天弄IP時想到這個可以進行轉換,於是研究了下原理:
主要是自己整理了下:
$ip = '12.34.56.78';
$ips = explode('.', $ip);
$result = 0;
$result += $ips[0]<<24;
$result += $ips[1]<<16;
$result += $ips[2]<<8;
$result += $ips[3];
echo bindec(decbin($result));
echo '<br>';
echo bindec(decbin(ip2long($ip)));
echo '<br>';
$str = '';
$str .= intval($result/intval(pow(2, 24))) .'.';
$str .= intval(($result&0x00FFFFFF)/intval(pow(2, 16))) .'.';
$str .= intval(($result&0x0000FFFF)/intval(pow(2, 8))) .'.';
$str .= intval($result&0x000000FF);
echo $str;
echo '<br>';
echo long2ip($result);
以上輸出的結果為:
203569230 203569230 12.34.56.78 12.34.56.78
這隻是實現的一種方法而已,還有其他的辦法
我是想用類似的方法,可以直接把一個十進製數字轉換為其他十進製數值並可逆,但遇到中間有很多0的數值時發現問題太多了,如 1000100
最後更新:2017-04-03 06:03:03