在单片机使用中,经常会用到串口助手,也需要整数与字符串的转换与显示,字符串转整形,整形转字符串,常用的库函数:
字符串转整型(十进制转换):
函数原型:
int atoi( const char *string );
string :要转换的字符串
返回值:转换结果
整型转字符串:
函数原型:
char *_itoa( int value, char *string, int radix );
value: 整数,转换对象
string: 转换结果
radix:(转换的基数,取值范围2-36)
c语言实现:
//函数功能:字符串转整形,十或十六进制(递归实现)
//入口参数:
// str:要转换的字符串
// num:转换类型,10.十进制转换;16:十六进制转换
//返回值: 转换结果
///
unsigned int My_atoi(const char *str, char num)
{
int ret = 0;
int i = 0;
if (str == NULL || *str == '\0')return 0;
else
{
if ('a' <= str[0] && str[0] <= 'z') //得到对应的十六进制数
{
ret = str[0] - 'W';
}
else if('0' <= str[0] && str[0] <= '9')//得到对应的十进制数
{
ret = str[0] - '0';
}
else if ('A' <= str[0] && str[0] <= 'Z')//得到对应的十六进制数
{
ret = str[0] - 55;
}
while (*(str + i + 1) != '\0') //确定该位所在的位置
{
i++;
}
if (num==10) //转换为十进制
{
if (ret > 9) exit(1);//参数输入错误
ret *= pow(10, i); //十进制转换
return ret + My_atoi(str + 1, 10);
}
if (num==16)//转换为十六进制
{
ret *= pow(16, i);//十六进制转换
return ret + My_atoi(str + 1, 16);
}
}
}
///
//函数功能:整形转字符串(十进制)
//入口参数:
// value:要转换的整数
// buf: 转换后的字符串保存位置
// N: 整数的位数
//返回值:
// 无
//
void My_itoa_For(unsigned int value, char buf[] , int N)
{
int i = 0;
int j = 0;
for (int j=N;j>0;j--)
{
//将整数value的第j位转换为字符:最低位为1(整数value第n位 = value%10^n/10^(n-1))
buf[i++] = (value % (int)pow(10, j) )/ (int)pow(10, j - 1)+ '0';
}
buf[N] = '\0';
}