hi @ll,
vielen Dank für Eure Hinweise!
Und so habe ich bis gestern spät in die Nacht hinein überflüssige (redundante) printf's rausgeschmissen und den Calculator ersteinmal so gebaut, wie ich den als Netzdesigner gebrauchen könnte. Es gibt in c zwar auch eine getops-Library (wie in Perl, danke Vinzenz, Stichwort Schalter), aber mein Kommandozeilenprogramm tut nur mit Arguementen.
Ohne Argumente gibt es aus:
IP-Calculator zum Berechnen von Subnetzen
Netzmaske Maskenlaenge Anzahl moeglicher Hosts
255.255.255.255 32 Bit 1 (Single Host)
255.255.255.254 31 Bit Nicht nutzbar
255.255.255.252 30 Bit 2
255.255.255.248 29 Bit 6
255.255.255.240 28 Bit 14
255.255.255.224 27 Bit 30
255.255.255.192 26 Bit 62
255.255.255.128 25 Bit 126
255.255.255.000 24 Bit 254
255.255.254.000 23 Bit 510
255.255.252.000 22 Bit 1022
255.255.248.000 21 Bit 2046
255.255.240.000 20 Bit 4094
255.255.224.000 19 Bit 8190
255.255.192.000 18 Bit 16382
255.255.128.000 17 Bit 32766
255.255.000.000 16 Bit 65534
255.254.000.000 15 Bit 131070
255.252.000.000 14 Bit 262142
255.248.000.000 13 Bit 524286
255.240.000.000 12 Bit 1048574
255.224.000.000 11 Bit 2097150
255.192.000.000 10 Bit 4194302
255.128.000.000 09 Bit 8388606
255.000.000.000 08 Bit 16777214
254.000.000.000 07 Bit 33554430
252.000.000.000 06 Bit 67108862
248.000.000.000 05 Bit 134217726
240.000.000.000 04 Bit 268435454
224.000.000.000 03 Bit 536870910
192.000.000.000 02 Bit 1073741822
128.000.000.000 01 Bit 2147483646
000.000.000.000 00 Bit 4294967293 (IP-Range)
Private IP-Adressen nach RFC 1918
10.0.0.0 - 10.255.255.255 (10/8 prefix)
172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
Options: ipcalc.exe [ip.ip.ip.ip/masklen] [Subnets]
Mit einem Argument kommt das hier:
ipcalc 10.0.0.0/24
Ergebnis der IP-Calculation
Netzmaske 255.255.255.0
Netzadresse 10.0.0.0
Broadcastadresse 10.0.0.255
Anzahl der Hosts 254
Default Class A
Das dritte Argument hat es "in sich", damit können die Adressbereiche für mögliche Subnets angezeigt werden, zwei Beispiele:
#1:ipcalc 10.0.0.0/24 2
Ergebnis der IP-Calculation
Netzmaske 255.255.255.0
Netzadresse 10.0.0.0
Broadcastadresse 10.0.0.255
Anzahl der Hosts 254
Default Class A
2 Subnetze mit Maskenlaenge 25 (je 126 Hosts):
10.0.0.0 - 10.0.0.127
10.0.0.128 - 10.0.0.255
#2:ipcalc 10.0.0.0/28 4
Ergebnis der IP-Calculation
Netzmaske 255.255.255.240
Netzadresse 10.0.0.0
Broadcastadresse 10.0.0.15
Anzahl der Hosts 14
Default Class A
4 Subnetze mit Maskenlaenge 30 (je 2 Hosts):
10.0.0.0 - 10.0.0.3
10.0.0.4 - 10.0.0.7
10.0.0.8 - 10.0.0.11
10.0.0.12 - 10.0.0.15
Ansonsten ist es mit c ein sehr spartanisches Programmieren, da ist viel zu Fuss zu machen und eine Funktion wie log2() in den Standardbibliotheken zu finden ist da schon Glücksache.
Andererseits macht das maschinennahe Programmieren mit Bit-Operatoren und richtigen Pointern schon alleine den besonderen Reiz von c aus und, wie mein damaliger c-Teacher immer sagte:
"Programmieren mit c ist wie das Fahren in einem offenen Geländewagen, je nach Gelände sieht der Chauffeur dann entsprechend aus." Nunja, es gibt Programmierfehler, die meckert der Compiler an, aber es gibt auch Solche, die er nicht bemerkt, sondern erst der Anwender, wenn er ein Speicherabbild gezeigt bekommt ;-)
Und überhaupt gibt es heute genügend Klickibunti-Programme, da tut es richtig gut, mal wieder auf der Kommandozeile was einzutippen.
Viele Grüße,
Hotte
PS: Geile Vorschau hier ;-)