ip2long函数会把一个ipv4转换成一串整型数字的形式,便于存储在数据库中可以节省空间和索引。ip2long函数的实现是先通过 . 把ip切割成4个数字,并进行位左移运算,最终拼接而成。反之就是long2ip的实现了。 ip2long如图:
//php函数实现 $ip = "8.8.8.8"; echo ip2long($ip); // 134744072
1.实现1,根据上图方式进行相应位运算实现
2.实现2
$ip = "8.8.8.8"; $ips = explode('.', $ip); $result = 0; $result += $ips[0]<<24; $result += $ips[1]<<16; $result += $ips[2]<<8; $result += $ips[3]; echo $result; // 134744072二、long2ip函数实现//php函数实现 echo long2ip(134744072); //8.8.8.8以上代码是由PHP的内置函数long2ip来实现的。但是对于想通过移位来自己实现的童鞋来说,可能没有那么简单。因为PHP的>>运算符是算术右移运算符,所以如果最高位是1的话,右移的结果是在高位补1,这跟结果不符。但是我们可以用另一种思路去解决:保存最高位(符号位),然后将最高位置0,之后再将高8位的最高位置1(这取决于之前保存的符号位)。代码实现如下:
?php $ip_long = 134744072; $ip1 = ($ip_long >> 24) & 0xff; // 跟0xff做与运算的目的是取低8位 $ip2 = ($ip_long >> 16) & 0xff; $ip3 = ($ip_long >> 8) & 0xff; $ip4 = $ip_long & 0xff; echo $ip1 . '.' . $ip2 . '.' . $ip3 . '.' . $ip4 . "n"; //8.8.8.8欢迎分享,转载请注明来源:内存溢出
评论列表(0条)