应网友所邀,写了一个数值转换函数,有不足之处欢迎拍砖.
#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;
/*
* 函数: 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;
}