IP größer wie die andere ?



  • Hallo,

    wie kann ich feststellen ob eine IP größer ist wie eine andere ?
    192.168.123.254 ist größer wie 192.148.123.254
    Die ip liegt als ingesamt 8 Integerwerte vor.
    Gibt es da einen einfachen Algoryhtmus ?
    Ich bin noch eine ziemliche Anfängerin wäre nett wenn mir jemand helfen könnte.

    MfG rita 😕



  • Such hier im Forum mal nach 'ip-range' da findest du entsprechende Ansätze.



  • rita schrieb:

    Gibt es da einen einfachen Algoryhtmus?

    Wenn man davon ausgeht, dass du deine IP als AnsiString abspeicherst, gibts da Operatoren: ">", "<", "=", ">=", "<=", "==", "!=", "+", "-", "+=", "-=":

    String sIP1="100.99.98.97";
    String sIP2="97.98.99.100";
    if (sIP1<sIP2)
       ShowMessage(sIP1+" ist kleiner als "+sIP2+".");
    else if (sIP1==sIP2)
       ShowMessage(sIP1+" ist gleichgroß wie "+sIP2+".");
    else
       ShowMessage(sIP1+" ist größer als "+sIP2+".");
    


  • Ach, wenn's doch nur so einfach wäre ... 😉
    Offenbar hast du deinen Vorschlag nicht getestet, zumindest nicht mit den von dir angegebenen Beispieladressen.
    Du wirst sicher die Lösung für das Problem finden, allerdings geht dadurch die erhoffte Eleganz des Ansatzes verloren.



  • Hab mal schnell was probiert, so hats jedenfalls bei meinen Tests geklappt 😉

    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    	String IP1="195.71.11.67";
    	String IP2="62.214.73.67";
    	unsigned long ip1, ip2;
    
    	ip1=IP2Long(IP1.c_str());
    	ip2=IP2Long(IP2.c_str());
    
    	if (ip1<ip2)
    	   ShowMessage(IP1+" ist kleiner als "+IP2+".");
    	else if (ip1==ip2)
    	   ShowMessage(IP1+" ist gleichgroß wie "+IP2+".");
    	else
    	   ShowMessage(IP1+" ist größer als "+IP2+".");
    }
    //---------------------------------------------------------------------------
    long TForm1::IP2Long(char *pip)
    {
    	int pos;
    	char *p;
    	union { unsigned long lip;
    			unsigned char cip[4];
    		} LIP;
    	pos=3;
    	p=pip-1;
    	LIP.lip=0;
    	do
    	{   LIP.cip[pos--]=atoi(++p);
    	} while((p=strchr(p, '.'))!=NULL && pos>=0);
    
    	return LIP.lip;
    }
    

Log in to reply