2.要求实现下面函数,自行实现字符串转整数,给定一个字符串表示10进制(大小在int类型范围之内),转换为n进制整数(2<=N<=36),若果转换是被返回"Error".例如,“10” 2, “1010”
char * radixConvert(const char *num,const int n);
代码
/*
cvte2019校园招聘提前批,嵌入式编程题2
2.要求实现下面函数,自行实现字符串转整数,给定一个字符串表示10进制(大小在int类型范围之内),转换为n进制整数(2<=N<=36),若果转换是被返回"Error".
char * radixConvert(const char *num,const int n);
*/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
char * radixConvert(const char *num, const int n)
{
char *num_string;
int temp=0;
static char p[50] = {0};
int i = 0;
int result = 0;
int j = 1;
int k = 0;
int index = 0;
num_string = (char *)malloc(sizeof(char)*(strlen(num)+1));
if ((num == NULL) || (n<2 && n>26))
{
printf("num is null or n is out raange\n");
}
else
{
strcpy(num_string, num);
temp = atoi(num_string);
//printf("temp:%d \n", temp);
while (temp)
{
i = temp%n;
result = result + i*j;
j = j * 10;
temp = temp / n;
k++;
}
//printf("result:%d\n", result);
free(num_string);
//sprintf(*p, "%d", num); //将num转为字符串输入到 p 中
sprintf(p, "%d", result); //将num转为字符串输入到 p 中
//printf("p:%s\n", p);
}
return p;
}
int main(void)
{
char *num = "11";
const int n = 2;
char *result;
result = (char *)malloc(sizeof(char)*32);
result=radixConvert(num, n);
if (result == NULL)
{
printf("转换失败\n");
}
else
{
printf("num:%s result:%s\n", num, result);
//free(result);
}
printf("helo....\n");
system("pause");
return 0;
}
运行结果
代码分析;
主要分为以下几步;
1.先把10进制的字符串转换为整数,调用c库函数,atoi
num=atoi(str).
2.把整数转换为n进制的数
3.使用sprintf函数,把整数转化为字符串输入到p中。
//sprintf(*p, "%d", num); //将num转为字符串输入到 p 中