可能重复:
用 C# 比较两个 ip
如何比较两个IP?通过比较,我的意思是判断 IP1 是否大于 IP2。那可能吗?如我所见,IPAddress
没有该功能。
编辑:请参阅此处的答案以获得更优雅的东西。不过,请注意有关字节序的警告。
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。这会在使用输入字符串之前对其进行验证。
编辑(这可能适用于注释中指定的所有条件)
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