zoukankan      html  css  js  c++  java
  • PHP如何以Int的形式存储IP地址

    以下是我的编写的IP转int的单例模式。

    要求:PHP版本^7.1可以直接使用
    低版本的应用,删除参数类型和返回值类型,也可以直接使用。

    源码如下:

    <?php
    
    namespace AppUtils;
    
    class IntIpUtils
    {
        private static $instance;
    
        private function __construct()
        {
        }
    
        /**
         * @return IntIpUtils 返回当前的实例
         */
        public static function getInstance(): IntIpUtils
        {
            if(!self::$instance){
                self::$instance = new self();
            }
            return self::$instance;
        }
    
        /**
         * @param string $ip 传入字符串ip信息
         * @return int 返回转换成功的Int形式的ip信息
         */
        public function ipToInt(string $ip): int
        {
            $ipArr = explode('.', $ip);
            $resInt = 0;
            // 172.185.255.233
            foreach ($ipArr as $item) {
                // 基础数据做移动8位
                $resInt = $resInt << 8;
                // 与当前数据进行按位或运算,目的是把后面的数字转换成二进制后,依次拼在后面
                $resInt |= $item;
            }
            // 最后以int的形式输出当前二进制数字
            return $resInt;
        }
    
        /**
         * @param int $int 传入Int形式的ip
         * @return string 返回目标ip
         */
        public function intToIp(int $int): string
        {
            $ipStr = '';
            for ($i = 3; $i >= 0; $i--) {
                // 算数运算符的优先级高于位运算符
                // 数字进行移位之后,再与二进制11111111数据,进行按位与运算,依次取出当前的IP字符串
                $ipStr .= ($int >> $i * 8 & 0b11111111) . '.';
            }
            return rtrim($ipStr, '.');
        }
    
    }
    
    

    测试代码如下:

    use AppUtilsIntIpUtils;
    
    $intIp = IntIpUtils::getInstance()->ipToInt("172.185.255.233");
    // dd($intIp); // 2897870825
    $ipStr = IntIpUtils::getInstance()->intToIp($intIp);
    dd($ipStr);  // 172.185.255.233
    

    测试可用

  • 相关阅读:
    PAT 1010. 一元多项式求导 (25)
    PAT 1009. 说反话 (20) JAVA
    PAT 1009. 说反话 (20)
    PAT 1007. 素数对猜想 (20)
    POJ 2752 Seek the Name, Seek the Fame KMP
    POJ 2406 Power Strings KMP
    ZOJ3811 Untrusted Patrol
    Codeforces Round #265 (Div. 2) 题解
    Topcoder SRM632 DIV2 解题报告
    Topcoder SRM631 DIV2 解题报告
  • 原文地址:https://www.cnblogs.com/hxsen/p/14629436.html
Copyright © 2011-2022 走看看