请教一个问题::wchar_t StrToHex;
CString str="6FFFFFFF";
long l=wcstol(str,&StrToHex,16);
  通过这种方法后,可以把字串"6FFFFFFF"
转换成16进制形式的0x6FFFFFFF;
  此时l就等于0x6FFFFFFF的十进制值:1879048191  因为wchar_t是有符号的32位字符型,
所以它能表示的最大正数是:2147483647
那么我要将一个字符"9FFFFFFF"转换成十六进制的十进制格式,
此时因为0x9FFFFFFF=2684354559它大于了2147483647
,那么在StrToHex的值就会溢出,所以l得不到正确值
wchar_t StrToHex;
CString str="9FFFFFFF";
long l=wcstol(str,&StrToHex,16);
我现在想将"9FFFFFFF"这个字符转换成16进制形式的0x9FFFFFFF,还有其它的法办吗?

解决方案 »

  1.   


    #include <stdio.h>int main()
    {
    char* str="9FFFFFFF"; unsigned long val = 0; sscanf(str, "%x", &val); return 0;
    }
      

  2.   

    楼主,wcstol这个函数的用法,你理解错了吧。它是将一个字符串转化为长整型。第二个参数是用来返回停止转化的字符的指针。详细你可以看msdn.
      

  3.   

    CString strText(_T("9FFFFFFF"));
    DWORD dwVal = _tcstoul(strText, NULL, 16);
    用这个呢?
      

  4.   

    第二个参数是NULL与一个wchar_t是一样的结果,这个函数输出的是有符号的32位字符型
    感谢你,sscanf不处理CString类型字串
    大哥啊,太感谢你了,你又帮了解决了一个问题。。感激啊我自己也弄了一个蠢办法,用位移的方法来把8位的十六进制当做2个4位的十六进制进行处理。
    CString mem2;
    wchar_t StrToHex;
    ULONG l;
    l=wcstol(mem2.Left(4),&StrToHex,16);
    tm=l<<16;
    l=tm+wcstol(mem2.Right(4),&StrToHex,16);
      

  5.   

    wchar_t StrToHex;
    ===================
    这里有问题吧!
    是停止位置的指针的话,应该定义为:
    wchar_t* strToHex;==================
    函数原型是
    long wcstol( const wchar_t * ptr,
                 wchar_t ** endptr,
                 int base );