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

convert MFC's CString to int for both ASCII and UNICODE

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

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

然而,这不适用于 UNICODE 模式下的项目,因为 CString 变成了宽字符字符串。

如何编写我的代码以涵盖 ASCII 和 UNICODE 模式而无需额外的 if 语句?

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

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

这两种模式都适用,无需额外努力。

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

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

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

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

对应的CStringW只使用宽字符。