CString转换为long为何丢失0?解决办法
CString转换为long为何丢失0?
代码如上,从CString转换为long型,csNum里是"400",转换后lNum里是4,结尾的两个0全没了,不知为何?
------解决方案--------------------
CString csNum =_T("400");
long lNum = 0;
lNum = atol((LPCSTR)csNum.GetBuffer(4));
CString csTmp;
csTmp.Format("%d", lNum);
AfxMessageBox(csTmp);
有值,你的GetBuffer 写的有问题。
------解决方案--------------------
估计你的工程是UNICODE编码的,每个字符双字节的。因此,'4'字符后边跟着一个0。
而你又将LPCTSTR(实际上这里是LPCWSTR)强行转换成LPCSTR
因此,atol认为它是一个长度为1的字符串,只转换成了4。对于双字节编码的字符串,你可以用_wtol来转换。
当然为了同时支持UNICODE和MBCS,并且你工程中的其他函数兼容,最好使用_ttol
- C/C++ code
CString csNum = _T("400");
long lNum = 0;
lNum = atol((LPCSTR)csNum.GetBuffer());
代码如上,从CString转换为long型,csNum里是"400",转换后lNum里是4,结尾的两个0全没了,不知为何?
------解决方案--------------------
CString csNum =_T("400");
long lNum = 0;
lNum = atol((LPCSTR)csNum.GetBuffer(4));
CString csTmp;
csTmp.Format("%d", lNum);
AfxMessageBox(csTmp);
有值,你的GetBuffer 写的有问题。
------解决方案--------------------
估计你的工程是UNICODE编码的,每个字符双字节的。因此,'4'字符后边跟着一个0。
而你又将LPCTSTR(实际上这里是LPCWSTR)强行转换成LPCSTR
因此,atol认为它是一个长度为1的字符串,只转换成了4。对于双字节编码的字符串,你可以用_wtol来转换。
当然为了同时支持UNICODE和MBCS,并且你工程中的其他函数兼容,最好使用_ttol
- C/C++ code
CString csNum = _T("400");
long lNum = 0;
lNum = _ttol((LPCTSTR)csNum);