-1

可能重复:
用 C# 比较两个 ip

如何比较两个IP?通过比较,我的意思是判断 IP1 是否大于 IP2。那可能吗?如我所见,IPAddress没有该功能。

4

2 回答 2

0

编辑:请参阅此处的答案以获得更优雅的东西。不过,请注意有关字节序的警告。

Pranay Rana 的回答从根本上被打破:比较 '11.2.3.4' 和 '1.12.3.4' 将表明它们是相等的。他们显然不是。

IP 地址本质上是特定形式的 32 位整数。您可以使用此事实编写一个简单的函数,该函数接受字符串值并为您提供整数,这更容易比较:

static void Main(string[] args)
{
    string ip1 = "11.2.3.4";
    string ip2 = "1.12.3.4";
    uint ipInt1 = ipAddressToInt(ip1);
    uint ipInt2 = ipAddressToInt(ip2);
    Console.WriteLine(ipInt1 < ipInt2);
    Console.ReadLine();
}

private static uint ipAddressToInt(string ip)
{
    uint retVal;
    System.Net.IPAddress ipAddress = System.Net.IPAddress.Parse(ip);
    byte[] IPBytes = ipAddress.GetAddressBytes(); 

    retVal = (uint)IPBytes[3] << 24;
    retVal += (uint)IPBytes[2] << 16;
    retVal += (uint)IPBytes[1] << 8;
    retVal += (uint)IPBytes[0]; 
    return retVal;
}

请注意 ipAddressToInt 函数中的System.Net.IPAddress.Parse。这会在使用输入字符串之前对其进行验证。

于 2012-10-16T15:42:52.420 回答
-1

编辑(这可能适用于注释中指定的所有条件)

string ip1= "1.2.3.4";
string ip2 ="5.6.7.8";

string[] ip1S = ip1.Split(new char[] {'.'});
string[] ip2S = ip2.Split(new char[] {'.'});

for(int i=0;i<4;i++)
{
  if(Convert.ToInt32(ip1S[i]) > Convert.ToInt32(ip2S[i]))
  {
    Console.WriteLine("ip1 is higher");
    break;
  }
  else if(Convert.ToInt32(ip2S[i]) > Convert.ToInt32(ip1S[i])) 
   {
    Console.WriteLine("ip2 is higher");
    break;
  }  
}

老的

你可以像这样做字符串comapre

string ip1= "1.2.3.4";
string ip2 ="5.6.7.8";

string ip1R = ip1.Replace(".","");
string ip2R = ip2.Replace(".","");


Console.WriteLine(String.Compare(ip1R ,ip2R ));

输出

A negative integer    str1 is less than str2.
0                     str1 equals str2.
A positive integer    This instance is greater than value.
-or-
1

有关 MSDN 上的更多更改字符串比较:http: //msdn.microsoft.com/en-us/library/fbh501kz (v=vs.80).aspx

于 2012-10-16T14:41:25.097 回答