C语言怎么将浮点变量存入字符数组

定义的一个字符数组char a[]="HEHDT,199.7,T"; 然后

for(result=a[0],i=1;a[i]!='\0';i++)
{
result^=a[i];
}
printf("result = %x\n",result);
这样的话就能计算出这个字符数组的异或和,现在问题来了,这个199.7 是我用传感器读取出来的 是一个浮点变量,(其他字符是固定的)我该怎样将这个变量存入字符数组然后计算出异或和呢?

如果是在PC上,直接使用sprintf函数就可以实现:

#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;
}

但在单片机中,没有现成函数调用,那就自己写:

#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;
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-08
#include"stdio.h"
b = 199.7;
sprintf(a,"HEHDT,%.1f,T",b);
结果就是
a[]="HEHDT,199.7,T"本回答被网友采纳
第2个回答  2015-05-03
char a[100];
double d=199.7;
sprintf( a, "%s,%.1f,T", "HEHDT", d ); 这样就可以了!本回答被提问者采纳
第3个回答  2015-05-03
利用字符与ascii码的关系 将float型的每一位变为字符型