MFCでCString
オブジェクトを整数に変換する方法。
_TCHAR.H
_ルーチンを(暗黙的または明示的に)使用している場合は、必ず_ttoi()
関数を使用して、UnicodeとANSIの両方のコンパイル用にコンパイルしてください。
最も簡単なアプローチは、_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
}
_
CString s;
int i;
i = _wtoi(s); // if you use wide charater formats
i = _atoi(s); // otherwise
_ttoi
関数はCString
を整数に変換できます。ワイド文字とANSI文字の両方が機能します。詳細は次のとおりです。
CString str = _T("123");
int i = _ttoi(str);
古き良きsscanfも使用できます。
CString s;
int i;
int j = _stscanf(s, _T("%d"), &i);
if (j != 1)
{
// tranfer didn't work
}
CString s="143";
int x=atoi(s);
または
CString s=_T("143");
int x=_toti(s);
atoi
をCString
に変換する場合は、int
が機能します。
受け入れられた答えの問題は、失敗を通知できないことです。できるstrtol
(STRing TO Long)があります。それはより大きなファミリーの一部です:wcstol
(Unicodeなどの長い文字列からUnicodeへ)、strtoull
(TO Unsigned Long Long、64bits +)、wcstoull
、strtof
(フロートへ)およびwcstof
。
標準的な解決策は、変換に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プロジェクトの両方に使用できます。
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)