myip2long
function myip2long($ip){?
?? $ip_arr = split('\.',$ip);?
?? $iplong = (16777216 * intval($ip_arr[0])) + (65536 * intval($ip_arr[1])) + (256 * intval($ip_arr[2])) + intval($ip_arr[3]);?
?? return $iplong;?
}
?
?
【造成原因】:Because PHP's integer type is signed, and many IP addresses will result in negative integers.
【解決辦法】:其官方手冊中提到,可以“you need to use the "%u" formatter of?sprintf()?or?printf()?to get the string representation of the unsigned IP address”
即,printf( '%u',?ip2long(?'IP地址' ) );
或者將其先轉換為二進制然后在轉換為十進制,bindec(?decbin(?ip2long( 'IP地址' ) ) );
【測試】
$strIp = '182.118.0.0';
echo ip2long($strIp); //此時輸出的-1233780736
echo '<br/>';
echo bindec( decbin( ip2long( $strIp ) ) ); // 輸出3061186560,與MySQL函數輸出一致~
【注】:
number?bindec?( string $binary_string ); //二進制轉換為十進制
string?decbin?( int $number ); //十進制轉換為二進制
總結
- 上一篇: 蓝桥杯 异或数列
- 下一篇: 工欲善其事,必先利器—Regex正则表达