PDA

Просмотр полной версии : Методы сравнения (c++)


kotel
30.09.2007, 13:23
Копался во многих источниках,к сожалению не нашел.
Задача:
сравнить текст,в случае если он одинаков ->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,спасибо.Доработал и получилось хорошо :))
Итог:
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
);
}


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