十六进制以内任意进制之间的转换

思路就是先转成10进制,再转成其他进制


/**m:源编码进制,m <= 16都适用
 * n:代表目的编码,也是得小于16
 * */
#include <stdio.h>
void m2n(int m, char* mNum, int n, char* nNum)
{
    int i = 0, tmp;
    char c, *p = nNum;
    //这是一个考察地方,是否能用最少乘法次数。
    printf("%s\n", mNum);
    while (*mNum != '\0')
    {
        if(*mNum >= 'a' && *mNum <= 'f'){    
            i = i * m + *mNum++ - 'a' + 10;
        }
        else
            i = i * m + *mNum++ - '0';
        printf("------%d\n", i);
    }
    //辗转取余
    while (i) {
        tmp = i % n;
        if(tmp > 9)
            *p++ = tmp - 10 + 'a';
        else
            *p++ = tmp + '0';
        i /= n;
    }
    *p-- = '\0';
    //逆置余数序列
    while (p > nNum) {
        c = *p;
        *p-- = *nNum;
        *nNum++ = c;
    }
}
int main()
{
    char result[100];
    m2n(16, "ff", 8, result);
    printf("%s\n", result);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/banana1006034246/article/details/78278784