public static int S2I(string addr) { return BitConverter.ToInt32(IPAddress.Parse(addr).GetAddressBytes(), 0); } public static string I2S(int addr) { return (new IPAddress(BitConverter.GetBytes(addr))).ToString(); }
322 var også hurtigt skrevet i eksemplet - ikke tænkt nærmere over det :)
Men grunden til, at jeg skal bruge alt dette er, at jeg skal kunne lave forskellige mængde-operationer på IP-adresser.
F.eks. har jeg en mængde med alle ip'er mellem 192.122.43.1 til 193.133.22.3 Og så skal jeg kunne sige, at jeg vil have returneret differens-mængden mellem førnævnte og f.eks. 192.125.2.2 til 192.155.3.3.
Så vidt jeg har kunne analysere mig frem til, kan man nemt gøre alt dette når de er konverteret til "bitniveau". Er det rigtigt forstået?
Følgende værdier fås ud fra de ip'er som står ud for. Så vil man jo ikke kunne bruge f.eks. større end eller mindre end, da en ip som er "større" end en anden ikke er det ud fra bit-værdien.
Jeg bruger nedenstående funktioner. Mest fordi jeg ikke kendte de andre funktioner, som er nævnt ovenfor. De er måske bedre end mine :)
/// <summary> /// Converts a string IP-address (w.x.y.z) to 32 bit signed integer /// </summary> /// <param name="ipAddress"></param> /// <returns></returns> public static int IPToInt(string ipAddress) { string[] ip = ipAddress.Split('.'); if (ip.Length != 4) throw new FormatException("IP address must be in the format 1.2.3.4");
Hvis man builder med check for arithmetisk overflow, saa skal man goere noget for at haandtere det. Hvis man builder uden det check, saa virker det som det skal.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.