Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Методы сравнения (c++) (https://forum.antichat.xyz/showthread.php?t=50170)

kotel 30.09.2007 13:23

Методы сравнения (c++)
 
Копался во многих источниках,к сожалению не нашел.
Задача:
сравнить текст,в случае если он одинаков ->true.Если же нет,то передача действия к следующей функции.

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

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

Код:


  if ((AnsiString) Ip=="XXX.XXX.XXX.XXX"){Edit1->Text="Айпи локальный";  }
  else Edit1->Text="Айпи не локальный";;


Piflit 30.09.2007 13:38

нужно сравнивать первые 3 символа стоки Ip с тремя сиволами маски

grinay 30.09.2007 15:56

используй циклы.а лучше по подробнее опиши суть вопроса.если честно не хя не понял)
А подробнее если я все понял правильно .создай масив с масками локальной сети тоесть
array("192","193");# к примеру
и с помошью while срафни в цикли первый ети цифры так сказать айпи адреса с етими если совпал значит break;и return все это дело загони в функциюв а в возврат помести ответ

Joker-jar 30.09.2007 16:28

Для локальных сетей вообще принято присваивать адреса из диапазона 192.168.*.*, а 127.0.0.* - это "кольцо" (придумали для тестирования сетевых приложений в условиях отсутствия реальной сети).

Код:

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


kotel 30.09.2007 23:49

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");
 } 

Вроде все правильно :)

KEZ 01.10.2007 03:54

хватит хулиганить
для локальных сетей были придуманы 172.168.*.* (255.255.0.0), 192.168.*.* (255.255.0.0), 10.*.*.* (255.0.0.0)
обратите внимание на МАСКИ подсети.

Цитата:

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

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

так что правильная ф-ия будет какой-то типа вот такой-то:
Код:

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
                );
}

-----
хотя все это (адреса) относительно и стандартизировано, можно привязать всё наоборот и радоваться веселому приколу


Время: 18:52