美文网首页
任意进制之间的转换

任意进制之间的转换

作者: 棒棒0_0 | 来源:发表于2018-05-23 11:10 被阅读0次

    任意进制之间的转换可以用除k取余法
    比如想把M进制转换成K进制,可以用输入数据连续去除K,直到商为零为止,然后把每次所得的余数倒看成一个数,就是相应的K进制数。

    将一个十进制数1234转换成八进制数的步骤如下:


    无标题.png

    则转换结果为2322

    将一个八进制数2322转换成十进制数的步骤如下:


    image.png

    则转换结果为1234

    C++实现:

    #include <iostream>
    using namespace std;
    
    #define MAX_LEN 2000
    
    int convert(char* src, int from, char* dst, int to)
    {
        int dstLen = 0;
        int divisor = 0;
        int quotientLen = 0;
        bool negative = false;
        bool invalidZero = true;
    
        if (*src == '-')
        {
            *dst = '-';
            dst++;
            src++;
            negative = true;
        }
    
        int srcVar[MAX_LEN] = { 0x00 };
        int dstVar[MAX_LEN] = { 0x00 };
        int srcLen = 0;
    
        while (*src != '\0')
        {
            if (*src >= '0' && *src <= '9')
            {
                srcVar[srcLen++] = *src - '0';
            }
            else
            {
                srcVar[srcLen++] = *src + 10 - 'A';
            }
            src++;
        }
    
        while (srcLen)
        {
            for (int i = 0; i < srcLen; i++)
            {
                divisor = divisor * from + srcVar[i];
                if (divisor / to > 0)
                {
                    srcVar[quotientLen++] = divisor / to;
                    invalidZero = false;
                }
                else if (divisor / to == 0 && (!invalidZero))
                {
                    srcVar[quotientLen++] = divisor / to;
                }
    
                divisor = divisor % to;
            }
            dstVar[dstLen++] = divisor; 
            
            srcLen = quotientLen;
            divisor = 0;
            quotientLen = 0;
            invalidZero = true;
        }
    
        for (int i = dstLen - 1; i >= 0; i--)
        {
            if (dstVar[i] >= 0 && dstVar[i] <= 9)
            {
                *dst = dstVar[i] + '0';
            }
            else
            {
                *dst = dstVar[i] - 10 + 'A';
            }
            dst++;
        }
    
        if (negative)
            return dstLen + 1;
        else
            return dstLen;
    }
    
    int main()
    {
        char src[] = "-FFFFFFFFFF";
        char dst[MAX_LEN] = { 0x00 };
        int dstLen = convert(src, 16, dst, 8);
    
        for (int i = 0; i < dstLen; i++)
        {
            cout << dst[i];
        }
        cout << endl;
        return 0;
    }
    

    相关文章

      网友评论

          本文标题:任意进制之间的转换

          本文链接:https://www.haomeiwen.com/subject/kzzljftx.html