void floatTochar(float f,unsigned char s[])//转换返回长度
void intTochar(unsigned int inter,unsigned char buf[],unsigned char len)//指定长度转换
#include "math.h"
void floatTochar(float f,unsigned char s[])//转换返回长度
{
//int dotsize=2; //保留小数点后两位
unsigned long int value,size,length;
int i,j;//防止j=length-1为负数
unsigned char temp,isNegative;
size=0; //value=0的情况
/* for(i=0;i<dotsize;i++) //这种方法不行,结果异常
{
f=f*10; //保留小数点后两位
}
value=(unsigned long int)f; */
if(f<0)
{
f=0-f;
isNegative=1;
}
value=(unsigned long int)(f*100);//浮点转整型
//分离整数,并转为ascii码
for(i=0;value>0;i++)
{
s[i]=value%10+'0';
value=value/10;
}
size=i;
length=size;
for(i=0,j=length-1;length>1;length/=2)
{
temp=s[i];
s[i]=s[j];
s[j]=temp;
i++;
j--;
}
//考虑以下小数点后的三种情况
length=size;
if(length==0) //0.001
{
s[length+2]='0';
s[length+1]='0';
s[length]='0';
size=size+3;
}
if(length==1) //0.01
{
s[length+1]=s[length-1];
s[length]='0';
s[length-1]='0';
size=size+2;
}
if(length==2) //0.1
{
s[length]=s[length-1];
s[length-1]=s[length-2];
s[length-2]='0';
size=size+1;
}
//考虑小数点前的位数情况,规定小数点前2位数
if(size==3) //小数点前1位的情况
{
for(i=0;i<size;i++)
{
s[size-i]=s[size-i-1];
}
s[0]='0';
size++;
}
for(i=0;i<2;i++)
{
s[size-i]=s[size-i-1];
}
s[size-i]='.';
size++;
s[size]='\0';
size++;
for(i=0;i<size;i++)
{
s[size-i]=s[size-i-1];
}
if(isNegative==1)
{
s[0]='-';
size++;
}
else
{
s[0]='+';
size++;
}
}
void intTochar(unsigned int inter,unsigned char buf[],unsigned char len)//指定长度转换
{
int i;
for(i=len-1;i>=0;i--)
{
buf[i]=inter%10+'0';
inter=inter/10;
//buf[i]=inter%((unsigned int)pow((double)10,(double)(len-i)))/((unsigned int)pow((double)10,(double)(len-1-i)))+'0';
}
}