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);
        }
  • 相关阅读:
    编码和字符集
    【机器学习】模型泛化
    asp.net GridView控件的列属性
    asp.net截取指定长度的字符串内容
    asp.net 对数据库表增加,删除,编辑更新修改
    asp.net 链接数据库ADO.NET
    常用正则表达式 验证电子邮件网址邮政编码等
    ASP.NET获取文件的相关知识
    C#获取picturebox图片路径
    C# dataGridView根据数据调整列宽
  • 原文地址:https://www.cnblogs.com/justdoyou/p/11793334.html
Copyright © 2011-2022 走看看