可能重复:
compare two ip with C#
如何比较两个IP?通过比较,我的意思是告诉IP1是否大于IP2。那可能吗?如我所见,IPAddress
没有该功能。
答案 0 :(得分:0)
编辑:请参阅the answer here了解更优雅的内容。但是请注意关于endian-ness的警告。
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。这会在使用输入字符串之前对其进行验证。
答案 1 :(得分:-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;
}
}
旧
你可以像这样做
字符串comaprestring 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