将 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
只使用宽字符。
在 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
只使用宽字符。