/**
*****************************************************************************************
*
* @Name : 浮点型转字符
* @Brief : none
* @Input : str:字符串指针 num:浮点数 n:精度
* @Output : none
* @Return : none
*
*****************************************************************************************
**/
int ftoa(char *str, float num, int n) //n是转换的精度,即是字符串'.'后有几位小数
{
int sumI;
float sumF;
int sign = 0;
int temp;
int count = 0;
char *p;
char *pp;
if(str == NULL) return -1;
p = str;
/*Is less than 0*/
if(num < 0)
{
sign = 1;
num = 0 - num;
}
sumI = (int)num; //sumI is the part of int
sumF = num - sumI; //sumF is the part of float
/*Int ===> String*/
do
{
temp = sumI % 10;
*(str++) = temp + '0';
}while((sumI = sumI /10) != 0);
/*******End*******/
if(sign == 1)
{
*(str++) = '-';
}
pp = str;
pp--;
while(p < pp)
{
*p = *p + *pp;
*pp = *p - *pp;
*p = *p -*pp;
p++;
pp--;
}
*(str++) = '.'; //point
/*Float ===> String*/
do
{
temp = (int)(sumF*10);
*(str++) = temp + '0';
if((++count) == n)
break;
sumF = sumF*10 - temp;
}while(!(sumF > -0.000001 && sumF < 0.000001));
*str ='\0';
return 0;
}
/**
*****************************************************************************************
*
* @Name : 转置函数
* @Brief : none
* @Input : s:待转换字符串
* @Output : none
* @Return : none
*
*****************************************************************************************
**/
void reverse(char *s)
{
char temp;
char *p = s; //p指向s的头部
char *q = s; //q指向s的尾部
while(*q)
++q;
q--;
//交换移动指针,直到p和q交叉
while(q > p)
{
temp = *p;
*p++ = *q;
*q-- = temp;
}
}
/**
*****************************************************************************************
*
* @Name : 整型转字符
* @Brief : none
* @Input : n:整型 s:字符串
* @Output : none
* @Return : none
*
*****************************************************************************************
**/
void itoa(uint16_t n,char s[])
{
uint16_t i = 0;
do //从各位开始变为字符,直到最高位,最后应该反转
{
s[i++] = n%10 + '0';
n = n/10;
}while(n > 0);
s[i] = '\0'; //最后加上字符串结束符
reverse(s);
}
实现ftoa与itoa
最新推荐文章于 2025-03-11 20:40:09 发布