Umwandeln einer u_int Ip adresse
-
Hallo Leute,
ich suche nach einer Methode eine als u_int vorliegende IP Adresse umzuwandeln. Da je eine IP aaa.bbb.ccc.ddd so berechnet wird a+256*b+256*256*c+256+256+256*d kann ich mit diesem Wert aus Sortiertechnischen Gründen nichts anfangen. Dieser u_int Wert bildet aber meine Ausgangsposition und soll in einen u_init Wert gewandelt werden der aufgelöst so aussieht 256*256*256*a+256*256*b+256*c+d
meine Fuktion die soweit funktioniert sieht so aus:u_int Convert_IP(u_int ip){ int a,b,c,d; help = ip; d = (int)(ip/16777216); //x.x.x.d ip -= d*16777216; c = (int)(ip/65536); //x.x.c.x ip -= c*65536; b = (int)(ip/256); //x.b.x.x ip -= b*256; a = (int)ip; //a.x.x.x ip = a*16777216 + b*65536 + c*256 + d; return(ip); }Wie würdet ihr diese Umwandlung durchführen, mit einem auf Geschwindigkeit optimierten Code?
Gruß Klaus
-
Klaus.. schrieb:
help = ip;ist natürlich Quatsch, war nur für Testzwecke drin.
-
Da es alles schön 2er potenzen sind, sind die bitweisen operatoren besser und schneller.
-
also sowas hier:
DWORD ip = ...; DWORD a = (ip & 0xFF000000) >> 24; DWORD b = (ip & 0x00FF0000) >> 16; DWORD c = (ip & 0x0000FF00) >> 8; DWORD d = (ip & 0x000000FF);
-
Ich meinte auch das zusammensetzen bitweise
u_int32_t res; res = (ip >> 24) & 0x000000ff; res |= (ip >> 8) & 0x0000ff00; res |= (ip << 8) & 0x00ff0000; res |= (ip << 24) & 0xff000000;Wichtig ist halt dass es immer 32-bit werte sind.
-
Dieser Thread wurde von Moderator/in Jester aus dem Forum Mathematik in das Forum Rund um die Programmierung verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
nimm einfach htonl.
--> http://www.opengroup.org/onlinepubs/007908799/xns/htonl.html

-
Danke für die Antworten ich habe jetzt die Verschiebefunktion genommen und es funktioniert einwandfrei.
@umkehr-freak
ah! gibt sogar eine fertige Funktion dafür, muss man halt nur wissen. Da ich nicht weis was schneller ist nehem ich jetzt mal die Verschiebemethode, warscheinlich arbeitet htonl genauso.