Convert MFC CString to integer

后端 未结 11 2057
南旧
南旧 2020-12-08 13:15

How to convert a CString object to integer in MFC.

相关标签:
11条回答
  • 2020-12-08 14:08

    The simplest approach is to use the atoi() function found in stdlib.h:

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

    However, this does not deal well with the case where the string does not contain a valid integer, in which case you should investigate the strtol() function:

    CString s = "12zzz";    // bad integer
    char * p;
    int x = strtol ( s, & p, 10 );
    if ( * p != 0 ) {
       // s does not contain an integer
    }
    
    0 讨论(0)
  • 2020-12-08 14:08

    A _ttoi function can convert CString to integer, both wide char and ansi char can work. Below is the details:

    CString str = _T("123");
    int i = _ttoi(str);
    
    0 讨论(0)
  • 2020-12-08 14:08

    You may use the C atoi function ( in a try / catch clause because the conversion isn't always possible) But there's nothing in the MFC classes to do it better.

    0 讨论(0)
  • 2020-12-08 14:09

    you can also use good old sscanf.

    CString s;
    int i;
    int j = _stscanf(s, _T("%d"), &i);
    if (j != 1)
    {
       // tranfer didn't work
    }
    
    0 讨论(0)
  • 2020-12-08 14:14

    The canonical solution is to use the C++ Standard Library for the conversion. Depending on the desired return type, the following conversion functions are available: std::stoi, std::stol, or std::stoll (or their unsigned counterparts std::stoul, std::stoull).

    The implementation is fairly straight forward:

    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() ) } );
    }
    

    All of these implementations report errors through exceptions (std::invalid_argument if no conversion could be performed, std::out_of_range if the converted value would fall out of the range of the result type). Constructing the temporary std::[w]string can also throw.

    The implementations can be used for both Unicode as well as MBCS projects.

    0 讨论(0)
提交回复
热议问题