IP Adresse in u32
-
Hey Leute,
gibt es eine Möglichkeit eine IP Adresse die in einem String gespeichert ist
z.B. 192.168.101.1 in u32 umzuwandeln, wenn ja wie?
-
Irre ich mich, oder tut die Funktion inet_addr() genau das?
-
Ehm ja das stimmt. Manchmal sieht man den Wald vor lauter Bäumen nicht.
-
Hab es jetzt komplett anders gelöst:
u32 ip_to_uint32(const char *ip){ int a,b,c,d; sscanf(ip,"%d.%d.%d.%d",&a,&b,&c,&d); int e_24 = pow(2,24); int f_16 = pow(2,16); int g_8 = pow(2,8); u32 ip_u32 = a*e_24+b*f_16+c*g_8+d; return ip_u32; }
-
Hier pow() zu benutzen, geht etwas übers Ziel hinaus.
Mach dich mal über die Shift-Operatoren << und >> schlau, sowie
über das binäre & (and) und | (or).u32 ip_u32 = ((u32)(a & 0xf) << 24) | ((u32)(b & 0xf) << 16) | ((u32)(c & 0xf) << 8) | ((u32)(d & 0xf));
-
Und beachte, dass bei inet_addr auch die Endianess immer NBO ist. (Glaub ich zumindest, bin mir gerade nicht sicher. )