将十进制整型数转成 2~36(不包含10) 进制数

应网友所邀,写了一个数值转换函数,有不足之处欢迎拍砖.

#include <stdio.h>

/*
* 函数: int convert(int num, char *str, unsigned int radix)
* 功能: 将十进制整型数转成 2~36(不包含10) 进制数
* 参数: num 十进制整型数
*        str 转换后的数字字符串缓冲区,假设缓冲区足够大
*       radix 基数
* 返回值: 成功转换返回1,否则返回0
*/
int convert(int num, char *str, unsigned int radix)
{
    char num_char[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    
    if (radix < 2 || radix > 36 || radix == 10)
        return 0;
    
    if (num < 0) {
        *str++ = '-';
        num = -num;
    }

    /*
    * 将十进制整型数转成radix进制
    
*/
    char *p = str;
    while (num) {
        *p++ = num_char[num % radix];
        num /= radix;
    }

    *p-- = '\0';

    /*
    * 由于转换成的数字字符串是反序的,
    * 下面的代码是将字符串进行反转
    
*/
    char ch;
    while (str < p) {
        ch = *str;
        *str++ = *p;
        *p-- = ch;
    }

    return 1;
}

int main(int argc, char* argv[])
{
    
    char str[100] = {0};

    convert(123456, str, 2);    //转换成二进制
    printf("%s\n", str);

    convert(123456, str, 8);    //转换成八进制
    printf("%s\n", str);

    convert(123456, str, 16);    //转换成十六进制
    printf("%s\n", str);

    convert(-123456, str, 20);    //转换成20进制
    printf("%s\n", str);

    convert(123456, str, 36);    //转换成36进制
    printf("%s\n", str);

    return 0;

posted on 2012-06-25 21:49  ^上善若水^  阅读(511)  评论(0编辑  收藏  举报

导航