Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

21

28.09.2015, 19:32

Mir geht es ja auch darum alles selber zu machen ;)

Zu den IP-Adressen: Ich hab mir kurz was überlegt, wie ich jede IP-Adresse aus einer beliebigen Subnetzmaske herausbekomme:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
unsigned int nullHost = netMask & myLocalIP;
unsigned int helperMask = ~netMask | nullHost
unsigned int newIP = 0;
for(unsigned int i = 1; newIP != nullHost; i++)
{
    newIP = (netMask | i) & helperMask;
    IPs.push_back(newIP);
}
IPs.pop_back();


Ich weiß nicht ob die Idee gut ist. Vielleicht kann ein erfahrener Entwickler kurz draufschauen.
Die Idee ist zunächst die IP für den Gerätecode 0 zu bekommen. Dazu ANDe ich die Subnetzmaske mit meiner IP, alle für Gerätecodes reservierte Bits werden genullt.
Die Helpermaske enthält die invertierte Subnetzmaske OR die IP mit Gerätecode 0. Dadurch werden die 0en in den Gerätecodebits in 1en umgewandelt. Verwendung folgt später.

Nun iteriere ich von 1 hoch, bis die neu ausgerechnete IP der IP mit Gerätecode 0 entspricht. Das tritt ein, wenn die Zahl eine 2er-Potenz ist und der Ausdruck (netMask | i) äquivalent zu netMask wird, da das Bit von i sozusagen verschluckt wird, da es an der Stelle einer 1 in der Subnetzmaske steht. Das bedeutet, dass der Gerätecode zu hoch ist und in Bits hineinlangt, die nicht für den Gerätecode bestimmt sind. Das ist das Zeichen für mich aufzuhören.

Die neue IP berechne ich, indem ich die Subnetzmaske mit dem Zähler OR rechne. Dadurch erhalte ich die Subnetzmaske, allerdings sind im Null-Bereich diverse Bits für den Gerätecode gesetzt. Das ganze rechne ich noch per AND mit der helperMask zusammen. Dabei wird das Netzwerkpräfix von der Helfermaske übernommen, genauso wie der Gerätecode von dem Zwischenergebnis.

Da die letzte IP schon außerhalb des Bereiches liegt, entferne ich sie nacher wieder. Das ganze kann ich auch vielleicht besser mit einer while-Schleife lösen, bei der ich vor dem push noch überprüfe und gegebenenfalls ein break setze.


Das habe ich mir jetzt spontan so überlegt, auch wenn ich das vielleicht nicht brauche, interessiert es mich trotzdem ob die Idee korrekt ist, oder was ich verbessern kann (ich mach das ganze ja zum Lernen) ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »birdfreeyahoo« (28.09.2015, 23:07)