如题:要将一个串“f32e”转换成十进制的数
尝试用_ttoi("f32e")来转换  发现串中只要出现字母转换出来的就是0;
 
  求高手说两句

解决方案 »

  1.   

    atoi只能是“1到9”,16进制要自己搞。
    //
    //
    int HexValue(unsigned char a)
    {
    a -= 48;
    if(a > 9 ) a -= 7;
    return a;
    }
    //使用:
    int adr=HexValue(szBuffer[0])*65536+HexValue(szBuffer[1])*4096+
    HexValue(szBuffer[2])*256+HexValue(szBuffer[3])*16+HexValue(szBuffer[4]);
      

  2.   

    多谢  找到方法了下面贴出代码如下供大家学习
    方法一:char fr[5];
    ULONG intfr=strtoul(fr,NULL,16);
    方法二:自己写一个转换的函数 StrToData(CString ,int);
    #include "StdAfx.h"
    #include "StrToData.h"
    long npf(int d,int n)
    {
    int i;
    long m=1;
    for(i=0;i<n;i++)
    m*=d;
    return m;
    }
    BOOL isRightData(char c,int jz)
    {
    if((jz<2)||(jz>16))
    return FALSE;
    char ch[]="00112233445566778899aAbBcCdDeEfF";
    int i=0;
    for(i=0;i<jz;i++)
    {
    if(c==ch[i*2])return TRUE;
    if(c==ch[i*2+1])return TRUE;
    }
    return FALSE;
    }
    long StrToData(CString strData,int jz)
    {
    int l=strData.GetLength();
    long IntValue=0;
    int bitValue;
    int i;
    for(i=0;i<l;i++)
    {
    if(isRightData(strData[i],jz))
    {
    if(isdigit(strData[i]))
    bitValue=strData[i]-0x30;
    else
    {
    switch(strData[i])
    {
    case 'a':
    bitValue=0x0a;
    break;
    case 'b':
    bitValue=0x0b;
    break;
    case 'c':
    bitValue=0x0c;
    break;
    case 'd':
    bitValue=0x0d;
    break;
    case 'e':
    bitValue=0x0e;
    break;
    case 'f':
    bitValue=0x0f;
    break;
    case 'A':
    bitValue=0x0a;
    break;
    case 'B':
    bitValue=0x0b;
    break;
    case 'C':
    bitValue=0x0c;
    break;
    case 'D':
    bitValue=0x0d;
    break;
    case 'E':
    bitValue=0x0e;
    break;
    case 'F':
    bitValue=0x0f;
    break;
    }
    }
    IntValue=bitValue*npf(jz,l-i-1)+IntValue;
    }
    else
    return -1;
    }
    return IntValue;
    }
      

  3.   

    够麻烦的,下面是我的代码:
    int StrXToInt(CString StrX)
    {
    if (StrX.IsEmpty())
    {
    return 0;
    }
    int len=lstrlen(StrX);
    int ret=0;
    int ind;
    for (int i=0;i<len;i++)
    {
    ind=len-1-i;
    if ((StrX[ind]>='A' && StrX[ind]<='F'))
    {
    ret+=(StrX[ind]-'A'+10)*((int)pow(16,i));
    }
    else if((StrX[ind]>='a' && StrX[ind]<='f'))
    {
    ret+=(StrX[ind]-'a'+10)*((int)pow(16,i));
    }
    else if (StrX[ind]>='0' && StrX[ind]<='9')
    {
    ret+=(StrX[ind]-'0')*((int)pow(16,i));
    }
    else
    break;
    }
    return ret;
    }