web-dev-qa-db-ja.com

MFC CStringを整数に変換します

MFCでCStringオブジェクトを整数に変換する方法。

40
rahul

_TCHAR.H_ルーチンを(暗黙的または明示的に)使用している場合は、必ず_ttoi()関数を使用して、UnicodeとANSIの両方のコンパイル用にコンパイルしてください。

詳細: https://msdn.Microsoft.com/en-us/library/yd5xkb5c.aspx

39

最も簡単なアプローチは、_stdlib.h_にあるatoi()関数を使用することです。

_CString s = "123";
int x = atoi( s );
_

ただし、これは文字列に有効な整数が含まれていない場合にはうまく対処できません。その場合は、 strtol() 関数を調べる必要があります。

_CString s = "12zzz";    // bad integer
char * p;
int x = strtol ( s, & p, 10 );
if ( * p != 0 ) {
   // s does not contain an integer
}
_
35
anon
CString s;
int i;
i = _wtoi(s); // if you use wide charater formats
i = _atoi(s); // otherwise
16
PaV

_ttoi関数はCStringを整数に変換できます。ワイド文字とANSI文字の両方が機能します。詳細は次のとおりです。

CString str = _T("123");
int i = _ttoi(str);
9
Jerry Young

古き良きsscanfも使用できます。

CString s;
int i;
int j = _stscanf(s, _T("%d"), &i);
if (j != 1)
{
   // tranfer didn't work
}
8
BrianK
CString s="143";
int x=atoi(s);

または

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

atoiCStringに変換する場合は、intが機能します。

3
sankar

受け入れられた答えの問題は、失敗を通知できないことです。できるstrtol(STRing TO Long)があります。それはより大きなファミリーの一部です:wcstol(Unicodeなどの長い文字列からUnicodeへ)、strtoull(TO Unsigned Long Long、64bits +)、wcstoullstrtof(フロートへ)およびwcstof

3
MSalters

標準的な解決策は、変換にC++標準ライブラリを使用することです。目的の戻り値のタイプに応じて、次の変換関数を使用できます。 std :: stoi、std :: stol、またはstd :: stoll (または対応する符号なしの対応要素 std :: stoul、 std :: stoull )。

実装はかなり簡単です。

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

これらの実装はすべて、例外を介してエラーを報告します( std :: invalid_argument 変換を実行できなかった場合、 std :: out_of_range 変換された値が範囲外になる場合結果タイプ)。一時的なstd::[w]stringもスローできます。

実装は、UnicodeとMBCSプロジェクトの両方に使用できます。

2
IInspectable

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はwchar_t文字列です。したがって、Cstringをintに変換する場合は、次を使用できます。

 CString s;  
int test = _wtoi(s)
1
HungVu