1. 程式人生 > >十六進位制以內任意進位制之間的轉換

十六進位制以內任意進位制之間的轉換

思路就是先轉成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;
}