CString csNum = _T("400");
long lNum = 0;
lNum = atol((LPCSTR)csNum.GetBuffer());
代码如上,从CString转换为long型,csNum里是"400",转换后lNum里是4,结尾的两个0全没了,不知为何?

解决方案 »

  1.   

    CString csNum = _T("400");
    long lNum = 0;
    lNum = atol(csNum);
      

  2.   

    CString csNum =_T("400");
    long lNum = 0;
    lNum = atol((LPCSTR)csNum.GetBuffer(4)); CString csTmp;
    csTmp.Format("%d", lNum);
    AfxMessageBox(csTmp);有值,你的GetBuffer 写的有问题。
      

  3.   

    提示不能从'CString'向'const char *'转换……
      

  4.   

    估计你的工程是UNICODE编码的,每个字符双字节的。因此,'4'字符后边跟着一个0。
    而你又将LPCTSTR(实际上这里是LPCWSTR)强行转换成LPCSTR因此,atol认为它是一个长度为1的字符串,只转换成了4。对于双字节编码的字符串,你可以用_wtol来转换。当然为了同时支持UNICODE和MBCS,并且你工程中的其他函数兼容,最好使用_ttol
    CString csNum = _T("400");
    long lNum = 0;
    lNum = _ttol((LPCTSTR)csNum);
    另外,GetBuffer(x)参数是多少?你这样可以编译的过?
      

  5.   

    使用GetBuffer(4)后好了。但是如果每次CString的长度都是不一定呢?用什么参数可以这样取?
      

  6.   

    我记得GetBuffer()不加参数是取里边全部长度。倒是一直能编译通过
      

  7.   

    首先,GetBuffer函数应该有参数,其次,我试了一下,应该没有问题,不知道你参数怎么写的。