char to int



  • leider geht es nicht nur um eine zahl sondern um 1-100



  • Dann schau zu den FAQ



  • Ne sehr komfortable Variante wäre:

    #include <sstream>
    
    template< typename Target_t, typename Source_t >
    Target_t lexical_cast( const Source_t& source )
    {
       std::stringstream converter;
       Target_t target;
    
       if( !( converter << source &&  converter >> target ) )
          throw "Conversion error!";
    
      return target;
    }
    
    //Verwendung:
    int i = lexical_cast< int >( "123" );
    


  • okt schrieb:

    leider geht es nicht nur um eine zahl sondern um 1-100

    also ein char-array zu int machen? nullterminiert oder feste größe? oder was?



  • Ich mach das immer so:

    char x;
    int i = atoi(&x);



  • ja ich habe ein festes char array (meinarray[100]) .. will aber nich das ganze in int haben sondern nur einen wert zb meinarray[1]. und in diesem steht jetzt zb 78. das moecht ich auch als int 78 haben.

    die antworten da oben haben auch gefeunzt nur wie schon einer geschrieben hat nur mit einer ziffer



  • hhhh schrieb:

    Ich mach das immer so:
    char x;
    int i = atoi(&x);

    das crasht.
    und für einen chart ist -'\0' nicht unangenehm.

    willste unbedingt atoi nehmen, mußte eher machen
    char tmp[]="x";
    tmp[0]=x;
    int i = atoi(&x);

    oder
    char tmp[]={x,'\0'};
    int i = atoi(&x);



  • Dann isses ja doch ein cast

    int val = (int)ch[5];
    

    🙂
    Kurt



  • Ne den Cast hat er ja selber in seinem ersten Posting.
    Mit meiner Variante wäre es: int i = lexical_cast< int >( '2' );



  • okt schrieb:

    ja ich habe ein festes char array (meinarray[100]) .. will aber nich das ganze in int haben sondern nur einen wert zb meinarray[1]. und in diesem steht jetzt zb 78. das moecht ich auch als int 78 haben.

    die antworten da oben haben auch gefeunzt nur wie schon einer geschrieben hat nur mit einer ziffer

    User--- schrieb:

    Ne den Cast hat er ja selber in seinem ersten Posting.
    Mit meiner Variante wäre es: int i = lexical_cast< int >( '2' );

    @User--- Dann müsste es nach deiner variante aber
    int i = lexical_cast< int >( '78' );
    sein. Was aber quatsch ist
    Kurt



  • ZuK schrieb:

    [...]

    User--- schrieb:

    Ne den Cast hat er ja selber in seinem ersten Posting.
    Mit meiner Variante wäre es: int i = lexical_cast< int >( '2' );

    @User--- Dann müsste es nach deiner variante aber
    int i = lexical_cast< int >( '78' );
    sein. Was aber quatsch ist
    Kurt

    Nein, das stimmt schon so wie es da steht.



  • @User---
    Ich geb ja zu dass die ursprüngliche Frage mit der oben zitierten Frage nichts mehr gemeinsam hat. Vielleicht erfahren wir ja noch was das Problem ist.
    BTW wenn du von boost::lexical_cast sprichst dann funktioniert das AFAIK aber nur mit char arrays oder std::string.
    Kurt



  • ZuK schrieb:

    @User---
    Ich geb ja zu dass die ursprüngliche Frage mit der oben zitierten Frage nichts mehr gemeinsam hat. Vielleicht erfahren wir ja noch was das Problem ist.
    BTW wenn du von boost::lexical_cast sprichst dann funktioniert das AFAIK aber nur mit char arrays oder std::string.
    Kurt

    Ich meinte mein lexical_cast von Seite1.



  • User--- schrieb:

    Ich meinte mein lexical_cast von Seite1.

    Wunderbare template-funktion.
    Nur wie du damit von

    char meinarray[100] = { 12, 78, 0 };
    int i = lexical_cast<int>(meinarray[1]);
    

    auf i == 78 kommen willst ist mir ein Rätsel. ( siehe letztes posting von okt. ) und nur davon spreche ich.
    Kurt



  • Moment, das was er dort beschreibt ist doch einfach int i = char( 78 );. Ich dachte er will char zahl[] = "78"; in 78 umwandeln.
    Dann hast natürlich recht.



  • Na wenigstens sind wir uns jetzt einig. Der OP scheint das Interesse ja schon verloren zu haben.
    Kurt


Anmelden zum Antworten