Eine Hausübung wo ich nicht weiter weiß

Heinzi1991

Erfahrenes Mitglied
ich hab bei einer hausübung ein paar fragen und ich hoffe ihr könnt sie mir beantworten!

hier einmal kurz zusammen gefasst und was es geht!

also wir haben eine input.c datei die wiefolgt aussieht!
Code:
int ip_address_1 = 0xC0A80101; //192.168.1.1/24
int ip_address_2 = 0x0A002000; //10.0.32.0/24
int suffix = 24;

Diese datei müssen wir in unsere hü - datei inkludieren und wird als test durch eine andere input.c datei ersetzt! die variablen ip_adress_1 und ip_adress_2 bezeichnen 2 IPv4 adressen und suffix speichert die anzahl der vorderen Bits der netzwerkmaske!

meine aufgabe ist nun mittel bitoperationen den hostteil von ip_adress_1 und den netzwerkteil von ip_adress_2 zu isolieren und eine neue IPv4 zusammengesetzt ausgeben:

New IP address: A.B.C.D/E\n

das ergebnis für die obige input datei kommt als ergebnis heraus:
New IP address: 10.0.32.1/24


Meine Fragen:
  • wie kann man die Zahlen vom hex -system herausfiltern?
  • wie kann man sie in deximal umschreiben?
  • und wie kommt man beim ergebnis auf .1?
hoffentlich könnt ihr mir helfen!
 
Hallo,

du musst dir dann für die Integer-Variablen die entsprechenden Masken überlegen mit denen du die einzelnen Komponenten deiner IP Addresse für die Notation in "a.b.c.d" herausmaskieren kannst. Dann kannst du über bitweises Verschieben und maskieren die einzelnen Stellen auslesen und dann, wenn du sie hast, wieder neu zusammen setzen lassen.

Also zum Beispiel um die 192 aus ip_address_1 heraus zu bekommen müsste folgender Code funktionieren (gerade ungetestet):

C++:
unsigned int firstPart = ip_address_1 & 0xFF000000;
firstPart = firstPart >> suffix;

std::cout << firstPart << ".b.c.d" << std::endl;

Ich hoffe das hilft dir schon einmal weiter.

Gruß,
Wolf
 
Zuletzt bearbeitet von einem Moderator:
Meine Fragen:
  • wie kann man die Zahlen vom hex -system herausfiltern?
  • wie kann man sie in deximal umschreiben?
  • und wie kommt man beim ergebnis auf .1?

Deine Zahlen liegen binär vor. Hex/Dec sind nur verschiedene Notationen.
Die Ausgabe erfolgt doch standardmäßig dezimal.

Kennst Du die benötigten bitweisen Operatoren? Die müßte euer Lehrer euch ja gezeigt haben.
 
also zu deiner frage ob ich die operatoren kenne; antwort ja!
ich hab noch eine frage wegen std::cout wie schreib ich das in c bzw was bedeutet das?
und als ergebnis für diese zeilen:
Code:
A = ip_address_1 & 0xFF000000;
A = A >> suffix;
//A = firstPart

kommt als ergebnis raus, wenn ich printf("%d", A) -64!
 
Zuletzt bearbeitet:
Nimm unsigned int als Datentyp. printf() braucht dann %u (oder %x für hex).

Du willst ja nur positive Zahlen. Und das Verhalten Shift-Operatoren ist für (signed) int undefiniert.
 
das A stimmt schon einmal mit den 192 und jetzt muss ich wieviele stellen noch rechts rücken damit ich die zweite stelle erwische? suffix + a? oder?
 
wie in der angabe geschrieben; es ist eine IPv4 adresse! und in der input datei steht nur die hex code von der ip adresse!
 
Wie schon gesagt: Das hat mit hex nichts zu tun! Das ist nur eine Notation.

Vorhin hast du um suffix(also 24) geshiftet und damit das oberste Byte geholt (Die IP-Adresse ist 32 Bit breit und besteht aus vier Bytes). Wie kommst Du jetzt ans zweite Byte?
(Die &-Maske muß natürlich auch angepaßt werden)
 
Zurück