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

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

递归把十六进制(字符串表示)转换称十进制数。例如:"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);
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值