需要把一个十六进制的字符串转化成数字。不能用那个十六进制的DLL。CString m("0E");
CString temp = "0x"+m;或者不要0x
int n;然后不管用上面的哪个函数进行转化,都需要的是char*格式的。直接把CString放进去是编译不通过的。用(char*)m.GetBuffer(m.GetLength())或者(char*)(LPCTSTR)m,
都只能转变m的第一个字符。

解决方案 »

  1.   

    CString temp = "0x"+m.GetBuffer(0);

    CString temp = "0x";
    temp+=m.GetBuffer(0);
    或者用sscanf是最好的,可以帮你消除中间的空格符.
      

  2.   


    只能读到第一个字符,被(char*)强制转换后,就只剩下一个字符了。
      

  3.   

    强制转换后使用strtoul应该没有问题。C++字符串以0为结束符,你的字符串以0开始,因此强制转换后只剩下一个字符。
      

  4.   

    这样没问题啊,CString重载了char*转换的操作
    CString m("0x0E");//m("0E");
    ULONG ul = strtoul(m, NULL, 16);顺便说说
    '0'和'\0'是不同的,'\0'才是字符串结束符
    LZ的m[0]='0'而不是'\0'