将ASCII和UNICODE的MFC的CString转换为int

时间:2015-12-02 02:14:10

标签: c++ unicode mfc ascii c-strings

在ASCII模式下将CString转换为int就像

一样简单
CString s("123");
int n = atoi(s);

但是,对于UNICODE模式的项目,这不起作用,因为CString变为宽字符串。

如果没有额外的if语句,如何编写代码以涵盖ASCII和UNICODE模式?

2 个答案:

答案 0 :(得分:3)

有一个特殊版本的CString使用多字节字符,即使您的构建是为宽字符指定的 - CStringA。它还会自动从宽字符转换。

CString s(_T("123"));
CStringA sa = s;
int n = atoi(sa);

有一个相应的CStringW只使用宽字符。

答案 1 :(得分:2)

原来只有_ttoi()可用于此目的:

CString s( _T("123") );
int n = _ttoi(s);

这适用于两种模式而无需额外的努力。

如果您需要转换十六进制(或其他基数)数字,您可以采用更通用的strtol()变体:

CString s( _T("0xFA3") );
int n = _tcstol(s, nullptr, 16);