在ASCII模式下将CString
转换为int
就像
CString s("123");
int n = atoi(s);
但是,对于UNICODE模式的项目,这不起作用,因为CString
变为宽字符串。
如果没有额外的if
语句,如何编写代码以涵盖ASCII和UNICODE模式?
答案 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);