IP in String dargestellt mit atoi zu int umwandeln
-
Hallo,
ich parse für ein Internet!!-IP-Erkennungsprogramm meine IP von der Website checkip.dyndns.org. Diesen String würd ich nun gern mit Hilfe von atoi zerlegen, und die 4 Werte dann separat mit
m_ip.SetAdress(int1,int2,int3,int4);
in mein IP-Ctrl. schreiben.
Jetzt weiß ich leider nicht, wie ich mit atoi umgehen muss, insbesondere, da zwischen den 4 Zahlen Punkte stehen.
Die FAQ zu dem Thema hab ich - selbstverständlich - schon durch, konnte aber nichts brauchbares draus ziehen.
Danke für eure Hilfe
-
Du musst den String vierteilen.
Zu dem Thema "Wie zerlege ich einen String an einem gegebenen Zeichen" sollte sich was finden lassen.
Und dann atoi mit dem einzelnen Teilen.
-
...ich kann es mir leider nicht verkneifen...
m_ip.SetAddress(atoi(strHTMLText.Left(strHTMLText.Find("."))),atoi(strHTMLText.Mid(strHTMLText.Find(".")+1,strHTMLText.Find(".",strHTMLText.Find(".")+1)-strHTMLText.Find(".")-1)),atoi(strHTMLText.Mid(strHTMLText.Find(".",strHTMLText.Find(".")+1)+1,strHTMLText.ReverseFind('.')-strHTMLText.Find(".",strHTMLText.Find(".")+1)-1)),atoi(strHTMLText.Right(strHTMLText.GetLength()-strHTMLText.ReverseFind('.')-1)));
-
wieder einmal bin ich dir zu dank verpflichtet, isabeau
-
Hust, hüstel,
ähhmm, die Sache funktioniert aber leider nicht in OnINIT, weil (denke ich mal) die Funktion
CString getHtmlSource(CString url) { CString somecode, s; CInternetSession session; CInternetFile* file = NULL; try { file = (CInternetFile*) session.OpenURL(url); } catch (CInternetException* m_pException) { file = NULL; m_pException->Delete(); } if(file) { while (file->ReadString(somecode) != NULL) { s = s + somecode; } } file->Close(); s.Delete(0,20); return s; }
bei mir ganz am ende steht. (von der cpp-Datei).
Was kann man denn da machen
-
zum trennen der einzelnen stücke:
http://www.c-plusplus.net/forum/viewtopic.php?t=85429
und dann auf diese atoi aufrufen.
-
SIo eine Funktion hat sowieso in einem c++-File nichts verloren. Wird verwenden hier Methoden von Klassen.
Und da ist es egal wo die Methode im File steht da sie in der Header-Datei definiert wird.Geht aber auch mit C-Funktionen.
Auch wenn es CString in C jetzt nicht gibt schreib ich das mal hin.CString getHtmlSource(CString url);
CString getHtmlSource(CString url)
{
CStr
.
.
.
.
.
-
Hmm, also, wenn ich meine getHtmlSource Funktion in die OnInit schreibe, dann erhalte ich folgende Fehlermeldung:
error C2601: 'getHtmlSource' : local function definitions are illegal
-
Und obwohl ich CString getHtmlSource (CString url) im Header deklariert habe bekomme ich folgende Fehlermeldung, wenn ich versuche, meinen obigen Code "irgendwo" Im Quelltext auszuführen:
IPAnzeigerDlg.obj : error LNK2001: unresolved external symbol "public: class CString __thiscall CIPAnzeigerDlg::getHtmlSource(class CString)" (?getHtmlSource@CIPAnzeigerDlg@@QAE?AVCString@@V2@@Z)
Debug/IPAnzeiger.exe : fatal error LNK1120: 1 unresolved externals
-
Versuch doch einfach mal sscanf:
int ip1, ip2, ip3, ip4; const char ip[] = "127.0.0.1"; sscanf(ip,"%d.%d.%d.%d", &ip1, &ip2, &ip3, &ip4);
-
Diesen Code verstehe ich nicht??
Und wo müßte ich ihn den einsetzen, OnINIT?
-
Ich bekomme das immer noch nicht hin, die atoi-Membervariable im Text richtig einzusetzen??!!
Kann mir da einer helfen
-
???
-
immer noch ???
-
immer noch ???
-
Nachdem Du eine Funktion in einer Klasse deklariert hast musst Du in der .cpp Datei es auch so haben:
CString CMyDialog::getHTMLSource(CString url) { ... }
und nicht
CString getHTMLSource(CString url) { ... }
Grundlagen sind das A und O !!
-
oder Du nimmst die Deklaration aus der Klasse raus und schreibst die Funktion ÜBER der OnInitDialog-Methode.
Somit ist es aber keine Methode der Klasse mehr!
-
Also,
wenn ich meine Funktion über den OnINIT-Dialog schreibe und dann auf die Funktion in OnINIT zugreifen möchte, findet er diese anscheinend nicht (undeclared identifier usw.)
und wenn das zweite ausprobiere
Nachdem Du eine Funktion in einer Klasse deklariert hast musst Du in der .cpp Datei es auch so haben:
bekomme ich ebenfalls folgende Fehlermeldungen:
error C2653: 'CIPAnzeiger' : is not a class or namespace name
error C2601: 'getHtmlSource' : local function definitions are illegalSo sieht mein Code aus:
CString CIPAnzeiger::getHTMLSource(CString url) { CString getHtmlSource(CString url) { CString somecode, s; CInternetSession session; CInternetFile* file = NULL; try { file = (CInternetFile*) session.OpenURL(url); } catch (CInternetException* m_pException) { file = NULL; m_pException->Delete(); } if(file) { while (file->ReadString(somecode) != NULL) { s = s + somecode; } } file->Close(); s.Delete(0,20); return s; } }
Das ganze steht am Ende von meiner IPAnzeigerDlg.cpp.
Wohlgemerkt ich versuche in OnInit mittels einer Member-Variable schon auf die Funktion zuzugreifen...
-
Sieht die allererste Zeile bei deiner OnInitDialog() genau so aus:
BOOL CIPAnzeiger::OnInitDialog()
oder genau so:
BOOL CIPAnzeigerDlg::OnInitDialog()
oder noch irgendwie anders ?
-
Ich Vollidiot,
ich hab's selbst gelöst. Manchmal sollte man einfach nochmal "deutlich" seinen Quellcode lesen, bevor man das Forum hier mit Fragen spamt.
Sorry und danke für eure Hilfe