Ip Adressen in C++ Angeben

Tag.
Ich hab mal wieder ein Problem mit C++
Und zwar:
Ich hab ein Programm geschrieben, welches IP Adressen ausgibt, die schon fest im Quellvode integriert sind.
Doch wenn ich die Adresse z.b. so eingebe:
123.432.324.45
so nimmt der Kompiler die Punkte als Kommars und gibt ne Fehlermeldung aus.
Auch mit normalen Kommars ist es nicht möglich.

Und wenn ich die Adressen ohne Punkt oder Kommar oder sonst was schreibe, soe gibt er mir bei manchen die Adressen mit einem Minus davor aus oder andere Zahlen wie die, die ich eingegeben habe.

Wie muss man das eingeben, dass er die Adresse doch mit Punkten anzeigt oder wenigstens mit den Zahlen, die ich eingegeben habe?


Danke schonmal im Vorraus.

Gurß, D31.
 
Hallo!

Ich vermute, du machst etwa folgendes:

int n = 19216801; // IP: 192.168.0.1

Kommas gehören da generell nicht hin, da es ja ein int, also eine ganze Zahl ist. Ausserdem können IPs auf diese Weise den Wertebereich eines Integers verlassen (2^32-1 bits = ca. 4 Milliarden), was dann dazu führt, dass die Zahl negativ ausgegeben wird ("Wrap around"). So geht's also nicht.

Der Compiler hat keine Ahnung von IP Adressen. Du musst also irgendeine Darstellung finden, die den IPs gerecht wird.

Eine IP besteht aus vier Bytes. Ein Byte = 2^8 Bits = 256 Mögliche Zustände. Wertebereich 0-255. Du hast damit verschiedene Möglichkeiten:

1. Du gibst IPs als hexadezimale Zahl an.

int x = 0xC0A80001; // C0=192 A8=168 00=0 01=1 -> 192.168.0.1

Die Bytes bleiben schön getrennt, es geht allerdings die übliche Darstellung mit den Punkten verloren.

2. Du speicherst die IP in einem String:

string str = "192.168.0.1";

Dann kannst du damit aber nicht rechnen.

3. Du machst das ganze mit einem Array:

int n[] = { 192, 168, 0, 1 };

Dann bleiben die einzelnen Bytes schön getrennt und man kann das ganze so ausgeben:

cout << n[0] << "." << n[1] << "." << n[2] << "." << n[3] << endl;

Es hängt ganz davon ab, was du brauchst.

mfG,
Thyrael
 
Naja, ein Kumepl und ich sind begeistert gewesen von "HacktheGame" und wollten sowas ähnliches machen.
Und dafür die IPs.
Naja, also rechnen will ich damit ja nicht.
ich denke, ich werd den string nehmen.

Vielen Dank.
 
Nun ja, dass man damit nicht rechnen kann, stimmt nicht ganz.
Man kann sie immernoch casten u.ä. und damit Berechnungen anstellen.
Es müsste auch frei verfügbare "Masken-Klassen" im Internet geben, ähnlich
wie Borlands Produkten.
 
Für IP-Adressen gibt es die die Struktur in_addr in der netinet/in.h.

Code:
/* Internet address.  */
typedef uint32_t in_addr_t;
struct in_addr
  {
    in_addr_t s_addr;
  };
 
mit der funktion aton() kannst du einen string ("192.168.1.1") in solch eine adresse wie bitmuncher es beschrieben hat umwandeln.
 
Zurück
Oben