-1

重複の可能性:
2つのIPをC#と比較します

2つの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 に答える