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