Методы сравнения (c++)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by kotel, 30 Sep 2007.

  1. kotel

    kotel New Member

    Joined:
    3 Sep 2006
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    Копался во многих источниках,к сожалению не нашел.
    Задача:
    сравнить текст,в случае если он одинаков ->true.Если же нет,то передача действия к следующей функции.

    Допустим мне надо сравнивать айпи адреса ,(локальный и не локальный).С помощью уже готовой функции получаем айпи адрес.Его значение равно переменной Ip.
    Потом идет сравнение ,в случае если он локальный то выводиться :Айпи локальный,если же нет,то :Айпи не локальный

    Так вот,вопрос:как сделать так,чтобы сравнение шло по маске?
    Т.е не использовать все время,и не сравнивать Ip,с каждый айпи адресом (127.0.0.1,192.168.1.1 и т.д).
    А чтобы автоматически шло сравнение по маске,к примеру:
    Если XXX -равно 192,то возвращается True (*проверка дальше не происходит),здесь XXX используется в качестве: XXX.168.1.1
    И т.д.Чтобы определить к примеру определенные сетки айпишек.

    Code:
    
      if ((AnsiString) Ip=="XXX.XXX.XXX.XXX"){Edit1->Text="Айпи локальный";  }
      else Edit1->Text="Айпи не локальный";;
    
     
    1 person likes this.
  2. Piflit

    Piflit Banned

    Joined:
    11 Aug 2006
    Messages:
    1,249
    Likes Received:
    585
    Reputations:
    31
    нужно сравнивать первые 3 символа стоки Ip с тремя сиволами маски
     
    1 person likes this.
  3. grinay

    grinay IQ- 137%

    Joined:
    15 Jun 2004
    Messages:
    409
    Likes Received:
    174
    Reputations:
    305
    используй циклы.а лучше по подробнее опиши суть вопроса.если честно не хя не понял)
    А подробнее если я все понял правильно .создай масив с масками локальной сети тоесть
    array("192","193");# к примеру
    и с помошью while срафни в цикли первый ети цифры так сказать айпи адреса с етими если совпал значит break;и return все это дело загони в функциюв а в возврат помести ответ
     
    #3 grinay, 30 Sep 2007
    Last edited: 30 Sep 2007
  4. Joker-jar

    Joker-jar Elder - Старейшина

    Joined:
    11 Mar 2007
    Messages:
    581
    Likes Received:
    205
    Reputations:
    37
    Для локальных сетей вообще принято присваивать адреса из диапазона 192.168.*.*, а 127.0.0.* - это "кольцо" (придумали для тестирования сетевых приложений в условиях отсутствия реальной сети).

    Code:
    if (Edit1->Text.SubString(0,7) == "192.168" || Edit1->Text.SubString(0,7) == "127.0.0")
      ShowMessage("local");
     
  5. kotel

    kotel New Member

    Joined:
    3 Sep 2006
    Messages:
    4
    Likes Received:
    1
    Reputations:
    0
    Joker-jar,спасибо.Доработал и получилось хорошо :))
    Итог:
    PHP:
    Edit1->Text=Ip;
    if (
    Edit1->Text.SubString(0,7) == "192.168" || Edit1->Text.SubString(0,7) == "127.0.0" || Edit1->Text.SubString(0,7) == "172.16" || Edit1->Text.SubString(0,7) == "10.0.0")
     
    ShowMessage("local");
     }
    Вроде все правильно :)
     
  6. KEZ

    KEZ Ненасытный школьник

    Joined:
    18 May 2005
    Messages:
    1,604
    Likes Received:
    754
    Reputations:
    397
    хватит хулиганить
    для локальных сетей были придуманы 172.168.*.* (255.255.0.0), 192.168.*.* (255.255.0.0), 10.*.*.* (255.0.0.0)
    обратите внимание на МАСКИ подсети.

    нифига подобного, 127.*.*.* используется как loopback

    так же, теоретически .0 значит тек. хост а .255 - броадкаст на всю подсеть

    так что правильная ф-ия будет какой-то типа вот такой-то:
    Code:
    BOOL isLocal( LPSTR szIP ) {
    
    	ULONG uAddr = inet_addr( szIP );
    	if (uAddr == -1) return FALSE;
    	
    	return (
    		(LOBYTE( LOWORD( uAddr ) ) == 192 && HIBYTE( LOWORD( uAddr ) ) == 168) ||
    		 LOBYTE( LOWORD( uAddr ) ) == 10 ||
    		(LOBYTE( LOWORD( uAddr ) ) == 172 && HIBYTE( LOWORD( uAddr ) ) == 168) ||
    		 LOBYTE( LOWORD( uAddr ) ) == 127 ||
    		 LOBYTE( LOWORD( uAddr ) ) == 255
    		 );
    }
    
    -----
    хотя все это (адреса) относительно и стандартизировано, можно привязать всё наоборот и радоваться веселому приколу
     
    #6 KEZ, 1 Oct 2007
    Last edited: 1 Oct 2007
    1 person likes this.