Hilfe!!! Hilfe!!! Fachabitur!!!
-
Leuchtdiode schrieb:
Da es sich um eine Netzwerkadresse handelt, muss wohl jede Zahl "zwischen einem Punkt" in genau ein Byte umgewandelt werden.
Dachte ich mir auch, aber ich kann mir nicht sicher sein, dass er dies meint, wenn er es nicht explizit angibt. Schließlich kann es auch eine Übungsaufgabe sein, und dann?
Egal, ich möchte erst einmal sehen, wie weit du gekommen bist.
-
Überhaupt: sollt ihr den Algorithmus zur Umwandlung selbst schreiben, oder könnt ihr euch einer Bibliothek bedienen? Dann wäre
_itoawohl das Richtige für dich.
-
Also ich will nicht schummeln.
Ich will nur Hilfe einbeziehen.
Also es soll aus der IP-Adresse eine binäre Zahl werden.
192.168.1.1 =11000000.10101000.00000001.00000001
Das ist ja noch nicht so schwer aber der Knackpunkt ist. Der . muss erkannt werden und sollte dann die 4 x 8 bit in 4 variabeln ausgeben. Also jeder Block sollte seine eigene Variable haben.
Da das direkt der erste Schritt ist, habe ich noch nicht viel porgrammieren können.Und vielen Dank für den Tipp in Zukunft nicht alle abzu schrecken.:D
Mir war nicht klar, dass ich diesen Effekt hervor rufe.Ich bedanke mich bis hier hin bei jedem schon mal der sich die Mühe gegeben hat mich über diesen Account zu kontaktieren.
-
#include <winsock2.h> int main() { .. addr.sin_addr.s_addr = inet_addr("192.168.0.1"); }Siehe auch: http://msdn.microsoft.com/en-us/library/ms738563(v=vs.85).aspx
Ansonsten selbst schreiben. Mit C++ Streams sollte das noch einfacher gehen, der C Weg wäre wohl strtoul.
-
zeig deinen Code, dann wird dir sicher geholfen, aber hier macht dir niemand deine Hausaufgaben
greetz KN4CK3R
-
Mr. XXX schrieb:
Und vielen Dank für den Tipp in Zukunft nicht alle abzu schrecken.:D
Mir war nicht klar, dass ich diesen Effekt hervor rufe.Übrigens rufst du den gleichen Effekt hervor, wenn du nicht allzu sehr auf deine Rechtschreibung achtest ...

Mr. XXX schrieb:
Also ich will nicht schummeln.
Ich will nur Hilfe einbeziehen.
Also es soll aus der IP-Adresse eine binäre Zahl werden.
192.168.1.1 =11000000.10101000.00000001.00000001
Das ist ja noch nicht so schwer aber der Knackpunkt ist. Der . muss erkannt werden und sollte dann die 4 x 8 bit in 4 variabeln ausgeben. Also jeder Block sollte seine eigene Variable haben.
Da das direkt der erste Schritt ist, habe ich noch nicht viel porgrammieren können.Schummeln ist nicht schlimm, es gibt nur einige ... nun, Moralapostel (der Ausdruck ist noch zensiert), die meinen, die Welt wäre gerecht.
Was dein Problem angeht:
std::stringzum Sichern und Teilen der Eingabe (vom Anfang bis Punkt, von Punkt zu Punkt, von Punkt zu Punkt und von Punkt zu Ende),_itoazum Umwandeln und fertig.Wenn du
_itoanicht benutzen darfst: frage dich erstmal, wie du manuell von Dezimal in Binär umwandelst, und dann versuche, den Compiler dies für dich machen zu lassen. Beispiel von mir:233/2=116 R:1
116/2=58 R:0
58 /2=29 R:0
29 /2=14 R:1
14 /2=7 R:0
7 /2=3 R:1
3 /2=1 R:1
1 /2=0 R:1Die Reste von oben nach unten lesen ergibt die Binärzahl. 233 ist also 1110 1001. Klingelt's?
Das Tolle ist aber: abhängig von der angegeben Basis (in dem Fall 2) kannst du mit dieser Formel in jedes System umrechnen.
-
Kleine Berichtigung: die Reste von unten nach oben gelesen ergibt die Binärzahl.
-
ja ok
danke euch
ich weiß zawr wie ich eine binärzahl entwickel
denke ich werden den modolu befehl nutzen aber ich muss erst ma schauen ob der befehl funktioniert die IP-Adresse in einem durch zu lessen allerdings später aufzusplitten und die 4 x 8 bit felder
ansonsten kann ich einfach nicht durch 2 teilen
ich werde die variable ja mit als charakter einlesen muss die aber in 4 int variabeln packen aber das stellt sich als schwieriger herraus als doch dachte
-
Ach übrigens: sollst du die Eingabe auch streng prüfen, oder einfach verwenden, und wenn es einen Fehler gibt, darf der Anwender rätseln, was passiert ist?
-
Zum Threadtitel lies dir mal bitte den Link in meiner Signatur durch...
-
Mr. XXX schrieb:
ich werde die variable ja mit als charakter einlesen muss die aber in 4 int variabeln packen aber das stellt sich als schwieriger herraus als doch dachte
Geht sogar mit C super einfach: strtoul.
-
Du musst gar nicht den Umweg über string gehen, du kannst die einzelnen Teile gleich in ints lesen:
int ip_1, ip_2, ip_3, ip_4; char c; cin >> ip_1 >> c >> ip_2 >> c >> ip_3 >> c >> ip_4; cout << ip_1 << "." << ip_2 << "." << ip_3 << "." << ip_4 << endl;
-
Mr. XXX schrieb:
ich werde die variable ja mit als charakter einlesen muss die aber in 4 int variabeln packen aber das stellt sich als schwieriger herraus als doch dachte
Das ist eigentlich noch das leichteste an der Übung, mach einfach ein paar cin's hintereinander, und spar dir das ganze Umwandeln.
-
War zu langsam.
Marsmann hat es bereits hingeschrieben.
-
Marsmann schrieb:
Du musst gar nicht den Umweg über string gehen, du kannst die einzelnen Teile gleich in ints lesen:
int ip_1, ip_2, ip_3, ip_4; char c; cin >> ip_1 >> c >> ip_2 >> c >> ip_3 >> c >> ip_4; cout << ip_1 << "." << ip_2 << "." << ip_3 << "." << ip_4 << endl;Das dieser Code aber ein bisschen unsicher ist, weißt du?
1. Was, wenn der Benutzer statt einer Zahl ein Zeichen eingibt? Auf meiner Maschine führt das sofort zum Beenden des Programms.
2. Außerdem kann der Benutzer auch versuchen, Adresse ohne Punke einzugeben, was garantiert zu einem Fehler führt, denn dann wird alles inip_1gesichert und der Benutzer hängt in 6 weiteren Eingaben fest.
3. Ich weiß nicht genau, was passiert, wenn der Benutzer aus Versehen zwei Punkte hintereinander eingibt. Zwei Szenarien: entweder wird alles bis zur nächsten Zahl incüberschrieben, oder die ganze Zahl wird ignoriert. Beides stimmt mich nicht zuversichtlich.
-
@ TE: Du kannst die Benutzereingabe überprüfen, an jedem Punkt spliten, die Zahlenstrings selbstständig in
intumwandeln (ist nicht so schwer, vom Buchstaben den Wert 48 abziehen und nach jeder Stelle den Wert zur nächsten Potenz von 10 hochrechnen) und dann mit meiner Formel wieder ins Binärformat schreiben.Eingabe spliten -> einzelne Strings
Einzelne Strings inints umwandeln -> einzelne Zahlen
Einzelne Zahlen in Binär umwandeln -> einzelne StringsNur noch mal zur Übersicht!
-
Glühbirne schrieb:
Das dieser Code aber ein bisschen unsicher ist, weißt du?
Das gilt für ca. 99% der Eingaben bei Schulaufgaben.
Glühbirne schrieb:
1. Was, wenn der Benutzer statt einer Zahl ein Zeichen eingibt? Auf meiner Maschine führt das sofort zum Beenden des Programms.
Wenn man es sicher haben will, kann man den Status des Streams abfragen und entsprechend handeln.
Glühbirne schrieb:
2. Außerdem kann der Benutzer auch versuchen, Adresse ohne Punke einzugeben, ...
Das sollte der Benutzer nicht versuchen, da das Unsinn ist. Aber, wie gesagt, man kann es auch "sicher" haben wenn man den Aufwand nicht scheut.
Übrigens musst du, falls du einen String einliest, bei der Umwandlung ebenfalls auf falsche Eingaben reagieren, falls du es "sicher" haben willst. Der Aufwand dürfte entsprechend sein.
-
Mitleid schrieb:
...
Wenn er 'ne gute Arbeit schreiben will, sollte ihm der Mehraufwand dies doch Wert sein, oder?
-
also ich scheue mich nich vor einem hohen aufwand

allerdings kann ich nicht mehr ganz folgen
wie kann man den status abrufen??
und in wie fern kann mir das helfen ??
-
Gepufferte Streams (
coutundcinsind welche) verfügen wie der Name sagt über einen Puffer. Alles, was über diese Streams kommt, wird erstmal im Arbeitsspeicher gesichert, weshalb du Informationen über die Ein- und Ausgaben abfragen kannst. Mit der Funktionrebufkannst du dir die Adresse desstreambuf-Objektes holen, mit dem du den Stream überprüfen kannst.Hilft das?