如果是在PC上,直接使用sprintf函数就可以实现:
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/71cf3bc79f3df8dc10214fedc111728b471028aa?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
#include <
stdio.h>
#include <
string.h>
int main()
{
float n=199.7;
char a[13];
strcat(a,"HEHDT,");
sprintf(a+6,"%.1f",n);
strcat(a,",T");
printf("a[]
字符串为:%s\n",a);
return 0;
}
但在单片机中,没有现成函数调用,那就自己写:
![](https://video.ask-data.xyz/img.php?b=https://iknow-pic.cdn.bcebos.com/b64543a98226cffcfa0d9acfb5014a90f603eaac?x-bce-process=image%2Fresize%2Cm_lfit%2Cw_600%2Ch_800%2Climit_1%2Fquality%2Cq_85%2Fformat%2Cf_auto)
#include <stdio.h>
void sprint(float n,char *reChar,int zsize,int xsize,int flag)//功能将浮点数n转成字符串,保存到以reChar地址开头的字符数组中(可实现插入)
//flag=0:直接转换浮点数到指定地址 flag=1:将转换的浮点数插入到指定地址位置
//zsize:n整数部分最大可能的位数。 xsize:n小数部分最大可能的位数+1(包含小数点)。
//reChar:用于返回处理后的字符串
{
int z,x,i=0,j=0;
char a[1+zsize+xsize];
n=n+0.00001;//+0.00001避免
浮点数精度丢失,可根据你传感器输出实际数字位数修改,不要超出类型范围
z=(int)n;
x=(int)((n-z)*10);//取小数数字,最大1位小数 *10 2位*100 3位*1000 需要自行修改 你也可以自己写10次方函数利用xsize运算
while(x/10!=0)
{
a[i++]=x%10+'0';
x=x/10;
}
a[i++]=x+'0';
a[i++]='.';
while(z/10!=0)
{
a[i++]=z%10+'0';
z=z/10;
}
a[i++]=z+'0';
a[i]=0;
for(i=zsize+xsize-1;i>=0;i--)
reChar[j++]=a[i];
if(flag==0)
reChar[j]=0;
}
int main()
{
float n=199.7;
char a[]="HEHDT,#####,T";
char b[6];
sprint(n,b,3,2,0);//调用方法一,直接转换
sprint(n,a+6,3,2,1);//调用方法二,转换并插入
printf("浮点数转字符串为:%s\n",b);
printf("总字符串为:%s\n",a);
return 0;
}