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
    

    测试可用

  • 相关阅读:
    postgresql客户端连接错误的解决方法【转】
    在游戏开发中使用管理类的目的和作用
    Unity3D对象池
    yield的作用
    Unity延迟和重复调用方法
    Unity的Asset Store商店下载文件路径
    C#委托和事件详解
    C#一个关于委托和事件通俗易懂的例子
    C#委托和事件定义和使用
    C#委托和事件
  • 原文地址:https://www.cnblogs.com/hxsen/p/14629436.html
Copyright © 2011-2022 走看看