练习系列 - 8、m进制转n进制(任意进制转换)

/*!
\author LiuBao
\date 2011/4/10
\brief m进制转n进制,主流实现方式
*/
#include <stdio.h>
 
/*!
m进制(数字)字符串转为n进制字符串。(先由m进制转为10进制,再由10进制转为n进制)
\param dest 转换完毕的n进制字符串
\param n 目的进制数(十六进制填16、二进制填2等)
\param src 初始m进制字符串
\param m 初始进制数,与目的进制数表示方法相同
\warning 初始m进制字符以10进制表示若超过int表示范围,结果未定义;且转换为n进制需要的字符个数未知。
*/
void m2n(char *dest, unsigned int n, const char *src, unsigned int m)
{
    char ch, *p = dest - 1;
    unsigned int i = 0;
 
    /* m进制字符串src转为10进制数i */
    while(*src) i = i * m + *src++ - '0';
 
    /* 辗转相除得出逆序的n进制表示在dest */
    while(i) *dest++ = i % n + '0', i /= n;
 
    /* 在dest写入结尾符 */
    *dest = '\0';
 
    /* 逆序字符串 */
    while(++p < --dest)
    {
        ch = *dest;
        *dest = *p;
        *p = ch;
    }
}
 
int main()
{
    char result[100];
 
    m2n(result, 10, "56", 16);
    printf(result);
 
    return 0;
}
posted @ 2011-04-10 21:00  紫红的泪  阅读(1976)  评论(0编辑  收藏  举报