Integer in standart string umwandeln unter Linux



  • Stichwort stringstream.



  • sprintf gibt es wohl auch unter Linux. Bin jetzt aber nicht so der C++ Held und Sicherheitsfanatiker. Mein Problem ist, dass ich in einem Programm einen Fehler beheben will. Den Fehler habe ich schon gefunden. Jedoch muss ich jetzt noch einen Integer nach string convertieren.

    schaum mir morgen mal streamstring an.

    Gruß binvielbloederalsdu


  • Mod

    char number[(sizeof(int)*CHAR_BIT)*3322/10000+2]={0};
    snprintf(number,sizeof number,"%d",i);
    


  • #include <boost/lexical_cast.hpp>
    #include <string>
    
    int main()
    {
      int i= 42;
      std::string s = boost::lexical_cast<std::string>(i); // eigentlich unnötig da man integer direkt ins cout packen könnte
      std::cout << "\n number = " << s << std::endl;
    }
    


  • (sizeof(int)*CHAR_BIT)*3322/10000+2

    😮 😮 😮 😮



  • also erstmal, solltest du dir als C++ Progger das arbeiten mit streams angewöhnen, also cout statt printf. Dann ist hier das Stichwort stringstream gefallen, das ist genau das, was man hier verwenden sollte, der kann alles mögliche einlesen (auch int), und kann es zu allem anderen möglichen konvertieren, wie auch strings. Ich wie ich finde für solche sachen das Universalwerkzeug und besser einsetzbar, als die eine spezialisierte Boost funktion.



  • also erst mal danke für die Hilfe.

    ich möchte mal n bisschen weiter ausholen, da einige den Post so interpretiert haben, als wollte ich nur den string auf den Bildschirm schreiben.

    In Wirklichkeit möchte ich das Programm js2mouse um ein paar Fehler erleichtern, da der Autor das Programm nicht mehr weiterentwickeln zu scheint. Mit Hilfe des Programms kann man mit einem Gamepad oder einem Joystick unter Linux eine Maus simulieren. Dazu legt das programm so weit ich das durchschaue hier einen char Array an:

    mouse_buff = (char *) calloc( buff_size, sizeof(char) );  // buff_size = 4
    

    Dabei ist mouse_buff[1] die Bewegung der X-Achse (horizontal) und mouse_buff[2] die Bewegung der Y-Achse (vertikal).

    im Programm wird dann von von mouse_buff[1] die Zahl 1 abgezogen. Vor der Rechnung war mouse_buff[1] = 0.

    Wenn ich nun mit

    printf("\n mouse_buff[1] = %d", mouse_buff[1]);
    

    das Ergebnis der Berechnung ausgeben möchte (sollte -1 sein). dann gibt er aber 255 aus. Der Mauszeiger läuft aber in die Richtige Richtung, obwohl der Wert für diese Richtung eigentlich negativ sein müsste. Also muss printf ja irgendwas anderes machen als ich will.

    Wie kann ich es erreichen, dass der Wert korrekt angezeigt wird ?

    Soll ich eine andere Ausgabefunktion nutzen wie cout oder sprintf ? Wo sind da die Unterschiede?

    P.S. Hoch lebe die Debuging Power von printf() !

    MFG binvielbloederalsdu



  • Auf deinem System scheint char einfach einen Wertebereich von 0..255 zu haben. -1 erzeugt da einen Underflow und die Variable enthäkt den Wert 255. Versuch mal den Datentyp signed char.



  • ok das wird was gröseres.

    in dem Programm gibt es schätzungsweise 150 Zeiger auf mouse_buff die ich jetzt alle ändern darf. 😃

    Gruß binvielbloederalsdu



  • ok du hattest recht. es lag an der interpretation von gcc. Das Programm funktioniert jetzt so wie es soll 😃

    Mein herzlicher Danke gilt allen dir mir geholfen habe. Ein sehr kompetentes Forum.

    MFG binvielbloederalsdu


Anmelden zum Antworten