std::string in u_char konvertieren



  • Hallo,

    ich hoffe, dass mir jemand helfen kann. Würde mich wirklich sehr freuen.

    Hier mein Vorhaben:
    Ich bekomme eine IP-Adresse als std::string übergeben (z.B 192.168.17.111). Diesen möchte ich aufteilen und in einem u_char Array ablegen
    (also 192,168,17,111 als u_char)

    Mein Problem:
    Ich teile den String und habe dann die einzelnen Elemente in einem String Array. Wie konvertiere ich jetzt z.B. den String 192 in u_char 192.

    ich habs so versucht:

    std::stringstream ssStream(stringZahl); 
    u_char ucharZahl; 
    ssStream >> ucharZahl;
    

    das funktioniert aber leider nicht, ucharZahl enthält dann immer nur die erste Ziffer des Strings (also bei 192 nur die 1).

    Wie schaffe ich es, dass er den kompletten String(192) in einen einzigen u_char umwandelt?

    Bin für jede hilfe dankbar, auch für andere Ansätze oder Ideeen

    Viele Grüße
    Tupo13



  • was is u_char??
    typedef für unsigned char? klingt auch so als wäre das ein Zeichen, pro char kann man nur ein Zeichen speichern, für mehr brauchst du natürlich ein Feld



  • Sorry,

    u_char ist natürlich typdef für unsigned char



  • Nach int umwandeln und dann nach unsigned char casten.



  • @ Gast

    zu deinem Tipp: Funktioniert leider auch nicht

    std::stringstream ssStream("192"); 
        int intZahl; 
        ssStream >> intZahl;
    

    Die Umwandlung nach int funktioniert

    Das Casten Funktioniert aber dann wiederum nicht

    char w;
    w = static_cast<char>(intZahl);
    

    es steht irgend ein Käse in w



  • was steht in w und was soll in w stehen?



  • std::stringstream ssStream("192");
    int intZahl;
    ssStream >> intZahl;
    
    unsigned char w = static_cast<unsigned char>(intZahl);
    std::cout << static_cast<unsigned int>(w) << std::endl; // gibt 192 aus
    


  • Lass mich raten, wenn du dahinter ein "cout<<w;" angibst, schreibt der Rechner ein einzelnes Sonderzeichen. Das liegt daran, daß char's für Ein/Ausgabe als Zeichen betrachtet werden.

    Eventuell solltest du dir überlegen, statt mit char (bzw. unsigned char) mit einem "echten" Zahlentyp zu rechnen.



  • @ CStoll and Gast

    OK Danke - das funktioniert hab es wirklich unwissend wie ich bin mit "cout<<w" versucht.

    Vielen Dank für eure Hilfe

    Gruß
    Tupo13



  • union
    {
    	unsigned char uc[4];
    	unsigned long l;
    } u;
    
    u.l = inet_addr("192.168.17.111");
    


  • jetzt gehts aber los hier *lol*



  • Pellaeon schrieb:

    jetzt gehts aber los hier *lol*

    Was meinst du? Warum soll man mit stringstreams rumhampeln, wenn es eine fertige Funktion für genau diesen Zweck gibt?


Anmelden zum Antworten