• 十六进制字符串转换为二进制字符串,二进制字符串转换为十进制字符串


    看某华为面试题目有感,十六进制转换为二进制很简单,同理八进制,四进制转换为二进制亦很简单。

    参考网上代码,二进制转换为十进制亦很简单,不过这想法真的是很巧妙,学习到了。

    //十六进制转换为二进制
    string HexToBin(string& str)
    {
        string res;
        size_t i, len = str.length();
        if (len <= 0) return res;
    
        for (i = 0; i < len; i++)
        {
            if (str[i] == '0')
                res += "0000";
            else if (str[i] == '1')
                res += "0001";
            else if (str[i] == '1')
                res += "0001";
            else if (str[i] == '2')
                res += "0010";
            else if (str[i] == '3')
                res += "0011";
            else if (str[i] == '4')
                res += "0100";
            else if (str[i] == '5')
                res += "0101";
            else if (str[i] == '6')
                res += "0110";
            else if (str[i] == '7')
                res += "0111";
            else if (str[i] == '8')
                res += "1000";
            else if (str[i] == '9')
                res += "1001";
            else if (str[i] == 'a')
                res += "1010";
            else if (str[i] == 'b')
                res += "1011";
            else if (str[i] == 'c')
                res += "1100";
            else if (str[i] == 'd')
                res += "1101";
            else if (str[i] == 'e')
                res += "1110";
            else if (str[i] == 'f')
                res += "1111";
            else {
                cout << "--ERROR--" << endl; break;
            }
        }
        return res;
    }
    
    //进制转换中间变量
    struct TBigInt
    {
        int len;
        char value[10000];
        TBigInt() :len(0)
        {
            for (size_t i = 0; i < 10000; i++)
                value[i] = 0;
        }
    };
    
    void AddBit(TBigInt& data, char BitVal)
    {
        size_t i = 0, len = data.len;
        for (i = 0; i < len; i++)
        {
            data.value[i] *= 2;
        }
        data.value[0] += BitVal;
        for (i = 0; i < len; i++)
        {
            data.value[i + 1] += data.value[i] / 10;
            data.value[i] %= 10;
        }
        if (data.value[data.len])
            ++data.len;
    }
    
    string OutputIntStr(TBigInt& data)
    {
        int i;
        string res;
        if (0 == data.len)
        {
            res.push_back('');
        }
        else
        {
            for (i = data.len - 1; i >= 0; --i)
            {
                res.push_back(data.value[i] + '0');
            }
        }
        return res;
    }
    
    //二进制字符串转换为十进制字符串
    string Bin2Deci(const string& str)
    {
        size_t i;
        TBigInt data;
        for (i = 0; i < str.length(); i++)
        {
            AddBit(data, str[i] == '1' ? 1 : 0);
        }
        return OutputIntStr(data);
    }
    
    int main()
    {
        int pos;
        string str, res;
        getline(cin, str);
        res = HexToBin(str);
        for (size_t i = 0; i < res.length(); i++)
        {
            if (res[i] != '0')
            {
                pos = i; break;
            }
        }
        res = res.substr(pos);
        cout << str << "->" << res << endl;
        cout << res << "->" << Bin2Deci(res) << endl;
        system("pause");
        return 0;
    }
  • 相关阅读:
    Haskell语言学习笔记(76)Data.Tree
    C++17尝鲜:编译期 if 语句
    C++17尝鲜:variant
    Haskell语言学习笔记(75)Conduit
    C++17尝鲜:string_view
    Haskell语言学习笔记(74)GADTs
    Haskell语言学习笔记(73)Existentials
    Haskell语言学习笔记(72)Free Monad
    sum of powers
    「2017 山东一轮集训 Day7」逆序对
  • 原文地址:https://www.cnblogs.com/jason1990/p/4796193.html
Copyright © 2020-2023  润新知