任意进制之间的转换

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

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


无标题.png

则转换结果为2322

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


image.png

则转换结果为1234

C++实现:

#include 
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;
}

你可能感兴趣的:(任意进制之间的转换)