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# 最有用的(自定义)代码片段是啥? [关闭]