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
    

    测试可用

  • 相关阅读:
    浅谈HTTP协议(下)
    HTML5 十大新特性(四)——Canvas绘图
    FPGA 机器学习之BP神经网络1
    FPGA模式识别之亮点,光点检测
    FPGA模式识别之数字检测
    FPGA大数据之我认为的明天
    FPGA 机器学习之BP神经网络2
    FPGA片外存储器之DDR2控制器2
    FPGA图像处理之边缘检测,中值滤波,图像均衡1。
    FPGA,verilog程序技巧之状态机与稳定性,高速
  • 原文地址:https://www.cnblogs.com/hxsen/p/14629436.html
Copyright © 2011-2022 走看看