Eine Hausübung wo ich nicht weiter weiß

Hex:
0xC0A80101; //192.168.1.1/24
und
0x0A002000; //10.0.32.0/24
ist binär
11000000 10101000 00000001 00000001
und
00001010 00000000 00100000 00000000
(Leerzeichen nur zur Veranschaulichung)

Vorhin hast Du
11000000 10101000 00000001 00000001
mit der Maske 0xff000000 verundet. Die sieht so aus:
11111111 00000000 00000000 00000000

Also
11000000 10101000 00000001 00000001
&
11111111 00000000 00000000 00000000
==
11000000 00000000 00000000 00000000

Und das hast Du um suffix (also 24) nach rechts geshiftet:
11000000 00000000 00000000 00000000 >> 24
==
00000000 00000000 00000000 11000000 == 0x000000C0 == 192


Dasselbe Ergebnis wäre hier übrigens auch ohne Maskierung entstanden:
11000000 10101000 00000001 00000001 >> 24
ist auch
00000000 00000000 00000000 11000000

Du hast also das oberste Byte an die unterste Stelle geshiftet.
 
also so hab ich das jetzt gemacht und hoffe es stimmt so:
Code:
A = ip_address_2;
A = A >> suffix;

ip_address_2 = ip_address_2 << 8;

B = ip_address_2;
B = B >> suffix;

ip_address_2 = ip_address_2 << 8;

C = ip_address_2;
C = C >> suffix;

ip_address_1 = ip_address_1 << 24;

D = ip_address_1;
D = D >> suffix;




printf("%d.%d.%d.%d/%d\n",A ,B ,C ,D ,E);
return 0;
 
Sieht auf den ersten Blick richtig aus. Kommt denn das richtige dabei raus?

Wenn auch ein wenig eigenwillig: kreatives Shiften um Masken zu vermeiden:)

Mein erster Ansatz sah übrigens so aus:
Code:
unsigned int ip_address_1 = 0xC0A80101; //192.168.1.1/24
unsigned int ip_address_2 = 0x0A002000; //10.0.32.0/24
int suffix = 24;
unsigned int maske = ~0 << (32 - suffix);
unsigned int ip_address_3 = ip_address_2 & maske | ip_address_1 & ~maske;
cout << (ip_address_3 >> 24 & 0xff) << '.' 
<< (ip_address_3 >> 16 & 0xff) << '.' 
<< (ip_address_3 >> 8 & 0xff) << '.' 
<< (ip_address_3 & 0xff) << '\n';
 
hab gerade einen fehler entdeckt, also die variablen ip_address_1 und _2 sind variabln und können verändert werden und die suffix auch, also stimmt es nicht mit mein shift nach links (8)! aber wie komm ich auf das beste ergebnis und die drei variablen sind in der input.c datei, wie kann ich diese in die main funktion inkludieren!
weil wenn ich #include <input.c> reinschreibe sagt der compilier: no such file or directory!
meine input.c datei schaut so aus:
Code:
void angabe()
{
    int ip_address_1 = 0xC0A80101;
    int ip_address_2 = 0x0A002000;
    int suffix = 24;
}
 
ok nachhang: das shiften hat ja nix mit dem suffix zu tun, oder?
so sieht jetzt mein code aus:
Code:
#include <stdio.h>

int main()
{
//#include <input.c>
int ip_address_1 = 0x7F000001;
int ip_address_2 = 0x7F000001;
int suffix = 16;

unsigned int A;
unsigned int B;
unsigned int C;
unsigned int D;
int shifter_right = 24;
int shifter_left = 8;

int E = suffix;


A = ip_address_2;
A = A >> shifter_right;

ip_address_2 = ip_address_2 << shifter_left;

B = ip_address_2;
B = B >> shifter_right;

ip_address_2 = ip_address_2 << shifter_left;

C = ip_address_2;
C = C >> shifter_right;

ip_address_1 = ip_address_1 << shifter_right;

D = ip_address_1;
D = D >> shifter_right;


printf("%d.%d.%d.%d/%d\n",A ,B ,C ,D ,E);
return 0;
}

muss jetzt nur noch die input.c datei inkludieren, weiß aber nicht wie******
 
Hallo,

normalerweise inkludiert man keine *.c -Files sondern nur header. Wenn du eine IDE hast werden diese dann automatisch zur korrespondierenden header-File gelinkt. (Etwas anders bei makefile-Projekten)

Außerdem inkludierst du die Datei an ganz falscher Stelle (siehe deinen auskommentierten Code). Das Inkludieren geschieht für gewöhnlich am Anfang der Datei, wo du auch <stdio.h> einfügst.

Viele Grüße,
Jennesta
 
Zurück