zoukankan      html  css  js  c++  java
  • php手动实现ip2long和long2ip

    php手动实现ip2long和long2ip

        /**
         * 测试
         */
        public function testipAction() {
            $ip = '10.58.101.175';
            echo ip2long($ip);
            echo "<br>";
            echo $this->myip2long($ip);
            echo "<br>";
            echo long2ip('171599279');
            echo "<br>";
            echo $this->mylong2ip('171599279');
        }
    
        /**
         * 自己实现ip2long
         * @param $ip
         * @return float|int|string
         */
        protected  function myip2long($ip) {
            $newhex = '';
            // 将ip分割成数组
            $ipsArr = explode('.', $ip);
            foreach ($ipsArr as $key => $value) {
                // 十进制最大值是255,如果超过,则直接返回
                if ($value > 255) {
                    return '';
                }
                // 将十进制转化为十六进制
                $hex = dechex($value);
                // 每个ip最大是255,十六进制是FF,最大是两位
                // 比如ip:1.1.1.1如果不补0,则十六进制是1111,十进制是4369
                // 如果补0,则十六进制是01010101,十进制是16843009
                if (strlen($hex) < 2) {
                    // 如果十六进制长度小于2,则自动补0
                    $hex = '0' . $hex;
                }
                $newhex .= $hex;
            }
            // 十六进制转化为十进制
            $intStr = hexdec($newhex);
            return $intStr;
        }
    
        /**
         * 自己实现long2ip
         * @param $int
         * @return string
         */
        protected function  mylong2ip($int) {
            //  FFFFFF最大为4294967295
            $int = $int >  4294967295  ? 4294967295  : $int;
            // 将十进制转为十六进制
            $hex = dechex($int);
            //为了避免7位ip出现,我们手动补0
            if (strlen($hex) < 8) {
                // 长度小于8,则自动补0
                $hex = '0'. $hex;
            }
            // 每两位进行分组。然后查看每组的第一位是否是0,如果是则去掉。然后把得到的值转为十进制,放在数组中,最后把数组用.连接起来
            for ($i =0; $i<8;$i+=2) {
                $a = substr($hex, $i, 2);
                $ippart = substr($a, 0, 1);
                if ($ippart === '0') {
                    $a = substr($a, 1, 1);
                }
                $aparr[] = hexdec($a);
            }
            return implode('.', $aparr);
        }
  • 相关阅读:
    POJ 3279 Fliptile 枚举+搜索
    POJ 3278 Catch That Cow
    CS Academy Round41 BFS+DFS
    CS Academy Round41 Tennis Tournament
    CS Academy Round41 Cinema Seats
    POJ 1177 Picture
    HDU 1255 覆盖的面积
    POJ 1151 Atlantis 线段树+离散化
    HDU 4614 Vases and Flowers 线段树+二分
    凑数问题
  • 原文地址:https://www.cnblogs.com/justdoyou/p/11793334.html
Copyright © 2011-2022 走看看