IP addresser

Tags:    c++

Hey folkens!

Jeg er ved at skrive et program til subnetberegning men er hurtigt kommet i modvind. Mit problem består i at lade brugeren indtaste IP og SM og derefter regne med disse. Hvordan får jeg fx. en værdi ud af "192.168.0.1" (int giver mig 192 og float 192.168).

Jeg går ud fra at det er det nemmeste i verden men jeg kender ikke umidelbart nogen løsning. Eller det vil sige at jeg kan selvfølgeligt bare lade brugeren indtaste en oktet af gangen uden nogen "." men det er jo ikke fedt.

Mvh

Kalle A



5 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato

Hej,

Det letteste er at lave en opdeling med regulære udtryk.

Fold kodeboks ind/udKode 



http://www.dreamincode.net/code/snippet1378.htm

Mere elegant med boost.regex ...
http://stackoverflow.com/questions/318236/how-do-you-validate-that-a-string-is-a-valid-ip-address-in-c




Alternativt kan du benytte frameworkets IP adresse holder.
http://msdn.microsoft.com/en-us/library/system.net.ipaddress(VS.71).aspx

http://msdn.microsoft.com/en-us/library/system.net.ipaddress.parse.aspx

http://www.java2s.com/Tutorial/CSharp/0580__Network/CreateparseIPaddressfromstring.htm


Egen string parser:
http://www.blog.highub.com/c-plus-plus/c-parse-split-delimited-string/


Med venlig hilsen
Ieet











Ja det bliver nok noget med at splitte det op. Evt. kan man jo bruge et multidimensionelt array.

int iparr[?][4];

Man kan også gøre det en hel del mere kompliceret, men det bliver ikke fra mig du får den anbefaling da det faktisk er lang tid siden jeg har roden med den slags.



Indlæg senest redigeret d. 18.01.2010 11:24 af Bruger #4414
Du bliver nok nødt til at gemme hvert segment af adressen i hver sin integer.



Alle de der regular expressions ser forkerte ud. Det her er også en legal IP adresse: 4.003.002.0x10

inet_addr funktionen gør det korrekt for alle bortset fra 255.255.255.255 da inet_addr returnerer 0xffffffff i tilfælde af fejl.



t