将16进制数转换成10进制数有什么好的算法

2025-03-13 16:51:48
推荐回答(2个)
回答1:

#include 
#include 
#include 
#include 
using namespace std;

bool Any2Dec(string &str, int system, double &val)
{
    if (system < 2 && system > 36)
        return false;
    bool flag = false;
    if (str[0] == '-')
    {
        flag = true;
        str = str.erase(0, 1);
    }
    val = 0;
    string fmt = "0123456789abcdefghijklmnopqrstuvwxyz";
    int pos = str.find('.');
    if (pos >= 0)
    {
        int exp = -1;
        for (int i = pos+1; i < str.length(); i++, exp--)
        {
            int n = fmt.find(str[i]);
            if (n < 0 || n >= system)
                return false;
            val += n * pow(system, exp);
        }
    }
    else
    {
        pos = str.length();
        for (int i = 0; i < pos; i++)
        {
            int n = fmt.find(str[i]);
            if (n < 0 || n >= system)
                return false;
            val += n * pow(system, pos-1-i);
        }
    }
    if (flag)
        val = -val;
    return true;
}

int main()
{
    double x;
    string str = "ff";
    if (Any2Dec(str, 16, x))
        cout << x << endl;
    else
        cout << "fmt err\n" << endl;
    return 0;
}

回答2:

https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&rsv_idx=1&ch=&rv_sd=13660_13387_13439_13203_13287_13602_13161_13257_11558_13085_8498&xpth=http%253A%252F%252Fwww.baidu.com%252Fs%253Fie%253Dutf-8%2526f%253D8%2526rsv_bp%253D1%2526tn%253D%2526wd%253Djquery%252520get%2526rsv_pq%253D85cb9ab80001cc79%2526rsv_t%253D5e5dhOzL7ZokcuO8mFu469Q5e9REnkJL1CKxnvfTLS5NLzBtEZvCU0fuv4s%2526rsv_enter%253D1%2526rsv_sug3%253D11%2526rsv_sug1%253D7%2526rsv_sug2%253D0%2526inputT%253D2736%2526rsv_sug4%253D4394+&tn=94910811_hao_pg&bar=&word=16%E8%BD%AC10%E8%BF%9B%E5%88%B6&rn=