十六進位制以內任意進位制之間的轉換
阿新 • • 發佈:2018-11-10
思路就是先轉成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; }