Cómo convertir un CString objeto entero en MFC.

InformationsquelleAutor | 2009-06-14

10 Comentarios

  1. 35

    El enfoque más sencillo es utilizar el atoi() función que se encuentra en stdlib.h:

    CString s = "123";
    int x = atoi( s );

    Sin embargo, esto no manejan bien con el caso de que la cadena no contiene un número entero válido, en cuyo caso usted debe investigar el strtol() función:

    CString s = "12zzz";    //bad integer
    char * p;
    int x = strtol ( s, & p, 10 );
    if ( * p != 0 ) {
       //s does not contain an integer
    }
    • tropezó aquí porque el compilador dice: «atoi: no se puede convertir el objeto CString const char *»; entonces descubrí su respuesta no funciona si se trata de una unicode proyecto, _ttoi es mejor como señaló el Unagi
    • error C2664: ‘atoi’ : no se puede convertir el parámetro 1 de ‘CString’ a ‘const char *’
  2. 16
    CString s;
    int i;
    i = _wtoi(s); //if you use wide charater formats
    i = _atoi(s); //otherwise
    • Necesitas hacer algo con los valores de retorno de las funciones de este código para ser útil.
    • Sí, por supuesto, correcto.
  3. 9

    Un _ttoi función puede convertir CString a entero, tanto de ancho char y ansi char puede trabajar. A continuación es la información:

    CString str = _T("123");
    int i = _ttoi(str);
  4. 8

    también puede utilizar el buen viejo sscanf.

    CString s;
    int i;
    int j = _stscanf(s, _T("%d"), &i);
    if (j != 1)
    {
       //tranfer didn't work
    }
  5. 3

    El problema con el aceptado la respuesta es que no la señal de fracaso. Hay strtol (de Cadena Larga) que puede. Es parte de una familia más grande: wcstol (Amplia Cadena DE Caracteres de Largo, por ejemplo, Unicode), strtoull (A Unsigned Long Long, 64bits+), wcstoull, strtof (Flotar) y wcstof.

  6. 3
    CString s="143";
    int x=atoi(s);

    o

    CString s=_T("143");
    int x=_toti(s);

    atoi va a trabajar, si desea convertir CString a int.

  7. 2

    Canónica de la solución es utilizar el Estándar de C++ Biblioteca para la conversión. En función del tipo de retorno, la conversión siguientes funciones están disponibles: std::hay, std::stol, o std::stoll (o sus unsigned contrapartes std::stoul, std::stoull).

    La aplicación es bastante sencillo:

    int ToInt( const CString& str ) {
        return std::stoi( { str.GetString(), static_cast<size_t>( str.GetLength() ) } );
    }
    
    long ToLong( const CString& str ) {
        return std::stol( { str.GetString(), static_cast<size_t>( str.GetLength() ) } );
    }
    
    long long ToLongLong( const CString& str ) {
        return std::stoll( { str.GetString(), static_cast<size_t>( str.GetLength() ) } );
    }
    
    unsigned long ToULong( const CString& str ) {
        return std::stoul( { str.GetString(), static_cast<size_t>( str.GetLength() ) } );
    }
    
    unsigned long long ToULongLong( const CString& str ) {
        return std::stoull( { str.GetString(), static_cast<size_t>( str.GetLength() ) } );
    }

    Todas estas implementaciones informe de errores mediante excepciones (std::invalid_argument si la conversión no se podría realizar, std::out_of_range si el valor convertido caería fuera del rango del tipo de resultado). La construcción de la temporal std::[w]string también puede lanzar.

    Las implementaciones pueden ser utilizados tanto para Unicode así como MBCS proyectos.

  8. 1

    Definir en msdn: https://msdn.microsoft.com/en-us/library/yd5xkb5c.aspx

    int atoi(
       const char *str 
    );
    int _wtoi(
       const wchar_t *str 
    );
    int _atoi_l(
       const char *str,
       _locale_t locale
    );
    int _wtoi_l(
       const wchar_t *str,
       _locale_t locale
    );

    CString es wchar_t cadena. Así que, si quieres convertir Cstring a int, puede utilizar:

     CString s;  
    int test = _wtoi(s)
    • CString depende de la _UNICODE y _MBCS símbolos de preprocesador. Se podría almacenar una codificación UTF-16 cadena Unicode, una cadena de caracteres DBCS o una cadena ASCII. Lo que sugiere que se trataría de una cadena Unicode está mal, lo siento.
  9. -2

    Usted puede utilizar el C función atoi ( en un try /catch cláusula, ya que la conversión no siempre es posible)
    Pero no hay nada en las clases de MFC para hacerlo mejor.

    • Bienvenido a stackoverflow. Puede que tengas razón, pero parece que se ha mencionado ya en 2009. (Cuando usted tiene suficiente reputación, usted puede agregar comentarios a las respuestas)
    • atoi no levanta las excepciones

Dejar respuesta

Please enter your comment!
Please enter your name here