C#中比较IP大小

Posted 沧海·

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中比较IP大小相关的知识,希望对你有一定的参考价值。

刚刚遇到一个问题复现一下
ip1-ip2是数据库现有的IP段
我要新存ip3 - Ip4 要求新存的IP段不能再之前的IP段中存在
例如旧的IP段IP1为 “192.168.0.1” IP2为“192.168.0.22”;
在这期间的不允许再有IP段了
我新存一个IP起始为IP3“192.168.0.4” IP4为“192.168.0.77”这时候显然不可以因为 0.4 -0.22中间是有重复的
我的判断逻辑是这样写的
IP2>=IP3&&IP1<=IP4 如果有的话就是存在重叠 看起来没问题
实际在执行过程中sql会认为0.22<0.4
解决方案:

   private static uint IPToID(string addr)
        
            if (!IPAddress.TryParse(addr, out var ip))
            
                return 0;
            
            byte[] bInt = ip.GetAddressBytes();
            if (BitConverter.IsLittleEndian)
            
                Array.Reverse(bInt);
            
            return BitConverter.ToUInt32(bInt, 0);
        
 			string ip1 = "192.168.0.22";
            uint a = IPToID(ip1);
            string ip2 = "192.168.0.4";
            uint b= IPToID(ip2);
            if (a>b)
            
                Console.WriteLine("True");
            
            else
            
                Console.WriteLine("False");
            


最终可以看到,我比较出了我想要的大小。

以上是关于C#中比较IP大小的主要内容,如果未能解决你的问题,请参考以下文章

C#代码中如何比较两个日期的大小?

比较两个字符串,在 C# 中忽略大小写 [重复]

用c#比较三个数的大小,并输出最大数。

C#比较大小

C#泛型比较大小

C# 时间比较大小