CString csNum = _T("400");
long lNum = 0;
lNum = atol((LPCSTR)csNum.GetBuffer());
代码如上,从CString转换为long型,csNum里是"400",转换后lNum里是4,结尾的两个0全没了,不知为何?
解决方案 »
- 初学ATL,BEGIN_OBJECT_MAP 搞不定 ??
- URLDownloadToFile()在WIN7下下载文件不成功
- PostMessage
- 获取窗口句柄的事
- 谁知道那里有这样的视图吗?
- 如何用API做Windows 的窗口
- 在Dialog上如何实现toolbar那样的类型的按扭?
- 问VC++6.0在WinXP下调试死机问题。(100分)
- 9x与2k系统在设置共享文件夹时都可以设置密码以及设置只读\完全属性,XP中如何编程实现
- 我在VB版提的问题没人能解决,只好请教用VC的大侠了:如何得到NT server的CPU使用率?
- 建非模态对话框,指针非空,句柄为空,不能显示对话框
- 关于TextOut输出中文的问题?急!急!急!----在线等
long lNum = 0;
lNum = atol(csNum);
long lNum = 0;
lNum = atol((LPCSTR)csNum.GetBuffer(4)); CString csTmp;
csTmp.Format("%d", lNum);
AfxMessageBox(csTmp);有值,你的GetBuffer 写的有问题。
而你又将LPCTSTR(实际上这里是LPCWSTR)强行转换成LPCSTR因此,atol认为它是一个长度为1的字符串,只转换成了4。对于双字节编码的字符串,你可以用_wtol来转换。当然为了同时支持UNICODE和MBCS,并且你工程中的其他函数兼容,最好使用_ttol
CString csNum = _T("400");
long lNum = 0;
lNum = _ttol((LPCTSTR)csNum);
另外,GetBuffer(x)参数是多少?你这样可以编译的过?