IP Adresse aus String parsen

OP #6239596
Hallo,
gerade versuche ich ein Youtube Video über TCPIP Kommunikation in C# 
nachzustellen und habe folgendes Problem. In der Zeile wo ich die IP 
Adresse für den Server berechne kommt immer ein Absturz:

System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
   bei System.Number.StringToNumber(String str, NumberStyles options, 
NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   bei System.Number.ParseInt64(String value, NumberStyles options, 
NumberFormatInfo numfmt)

Meine IP ist vorab so definiert:
String MyIP = "127.0.0.1";

Die Programmzeile die es dann verursacht ist diese:
System.Net.IPAddress IP = new System.Net.IPAddress(long.Parse(MyIP));

Der Absturz kommt von den Punkten, wenn ich da einfach mal eine Zahl 
eintippe stürzt nix ab (und ich bekomme eine falsche IP Adresse 
natürlich..):

String MyIP = "1272234"; -> Kein Absturz!! IP ist natürlich Humbug..

Das Parsen ist genau wie im Video, wieso ist das Format ungültig? Ich 
hab schon eine Stunde herum gegoogelt finde aber kein brauchbares 
Besipiel.
Hat jemand ein Beispiel?
Besten Dank, Thomas
Ich habe keine Ahnung von C#, und schaue mir auch keine YouTube-Videos 
über proggen an.

Aber ich habe eine Vermutung, was long.parse() erwartet. Genaueres 
sollte in der Dokumentation dazu stehen. Wenn ich Microsoft richtig 
einschätze, ist die genau eine F1-Tastendruck entfernt.

Oliver
Gast
Ich verstehe dein Problem nicht.

Du hast du IP als String.  Was soll den daraus werden ?

Wenn du die Nummerisch brauchst musst du 4 Variabeln anlegen. Und das 
Teil in einer Schleife auseinander rupfen. Also 4 Strings binden. Dazu 
benutze ich die MID-Funktion und eine nette kleine For-Next Schleife.

Sollen die nun einzelnen Blöcke eine Zahl werden reicht ein einfacher 
VAL Befehl.

Falls du den Code dazu nicht schaffst lerne einfach mal die Behandlung 
von Strings oder Frag mich ;) Denn DAS ist Anfängertechnik.


Gruß

  Pucki
Alexander K. schrieb:
> Wenn du die Nummerisch brauchst musst du 4 Variabeln anlegen. Und das
> Teil in einer Schleife auseinander rupfen. Also 4 Strings binden.

Möööp. Reingefallen.

Bei der Angabe von nummerischen IPv4-Adressen darf man manche "0x00"-er 
Bytes weglassen. (*)

d.H. "1.1" ist eine gültige Angabe und dasselbe wie 1.0.0.1 (Cloudflare 
Public DNS)
"127.1" ist dasselbe wie "127.0.0.1"
"192.168.42" ist dasselbe wie "192.168.0.42".

*) Exakter: Wenn drei Blöcke angegeben sind, wird der letzte als 16Bit, 
bei nur zweien als 24 Bit ausgewertet, deshalb geht auch sowas:

Jan B. schrieb:
> exotischeres ipv4 Formaten (z.b. 20.65535)

Nettes Andenken an 1980 :)

d.H.:

Alexander K. schrieb:
> eine nette kleine For-Next Schleife.

reicht nicht ganz. Du musst nach '.' trennen, die Trennstücke zählen, 
nach uint wandlen, alle bis auf den letzten auf 8 Bit limitieren, den 
letzten auf die übriggebliebenen Bits limitieren, entsprechend shiften, 
und zusammen-odern.

Schöne Fingerübung für Bitoperationen, ansonsten nimm lieber die 
fertigen Funktionen aus deinem Framework.
Gast
regmatchEx oderso. da kann man das gut mit wandeln...
Müsste ich aber auch erst am Rechner nachsehen
Aber ne lösung wurde ja schon genannt. IPAdress kann das von sich aus.
Gast
Εrnst B. schrieb:
> Bei der Angabe von nummerischen IPv4-Adressen darf man manche "0x00"-er
> Bytes weglassen. (*)

das ist richtig, aber so wenig bekannt, das man sich kaum darauf 
verlassen kann.
Wenn mit C Standardfunktionen zerlegt wird gibts noch die Falle das zB 
ein '070' einen octal Wert von dez. 56 darstellt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.