递归把十六进制(字符串表示)转换称十进制数

来源:互联网 发布:淘宝个人主页动态删除 编辑:程序博客网 时间:2024/05/16 03:05

快放假了,来个简单一点的题。

递归把十六进制(字符串表示)转换称十进制数。例如:"1f"就输出31。

关键就是要求出当前要处理的位应该对应的指数,可以用当前位置和字符串的长度来求出。例如,表示十六进制的字符串有3个字符,那么第一个字符处于0位置,对应的指数应该是3-0-1=2,应为最低位对应的指数是0嘛。

递归的终止条件就应该是判断出当前位置已经是末尾了。

unsigned long hex2decimal(char * strHex, int nSt, int nEd){    char chDigit= *(strHex+nSt);    int nDigit = 0;    if(nSt<=nEd)    {        if ((chDigit>='a')&&(chDigit<='f'))        {            nDigit = chDigit - 'a' + 10;        }        else if ((chDigit>='A')&&(chDigit<='F'))        {            nDigit = chDigit - 'A' + 10;        }        else if ((chDigit>='0')&&(chDigit<='9'))        {            nDigit = chDigit - '0';        }        int npower = nEd-nSt-1;        unsigned long nResult = 1;        for(;(npower>=0);npower--)        {            nResult = nResult*16;        }        nResult = nResult*nDigit + hex2decimal(strHex, nSt+1, nEd);        return(nResult);    }    else        return(0);}


0 0
原创粉丝点击