浮点型/整型转字符串

前言

 有时我们在编写ESP8266程序的时候,库函数提供的sprintf()函数不能将浮点型数据转为字符串。或者在编写内存较小的单片机时,使用sprintf()等库函数会占用较大的代码空间,这时我们就需要自己写一些占用内存较小的函数实现浮点型或整形转字符串的功能。

函数实现

整形转字符串
 整形转字符串也就是将整形数据的每位数取出来,然后将每位数加上字符’0’,转换结束后加上字符串结束符’\0’,即可将整形数转化为字符串。如需要将1365转化为字符串即,将1365对10连续求余,结果为0则结束求余。那么1365可以求4次余,第一次为1,则将1加上字符’0’,求第5次的时候结果为0,则1365的位数就是4,5-1即为整形数的位数。代码实现如下所示:

/**
 * @brief 整形数据转化到字符串
 * @param date  需要转换成字符串的整形数据
 * @param buffer  存放转换数据的字符串
 */
void int2string(int date,char* buffer)
{
    int temp=0,absdate=0,i=0,j=0;
    if(date>0)//判断是否大于0
    {
      buffer[0] = '+';
      absdate=date;
    }
    else if(date==0)//如果等于0
    {
        buffer[0] = '0'; 
        buffer[1] = '\0';
        return ;
    }
    else//如果小于0
    {
        buffer[0] = '-';
        absdate = -date;
    }
    temp = absdate;//取整数部分
    for(i=0;temp!=0;i++)//计算整数部分的位数
        temp /=10;
    temp = absdate;//取整数部分
    for(j=i;j>0;j--)//将整数部分转换成字符串型
    {
        if(date>=0) buffer[j-1] = temp%10+'0';
        else buffer[j] = temp%10+'0';
        temp /=10;
    }
    if(date>=0) buffer[i] = '\0';//加上字符串结束符
    else buffer[i+1] = '\0';
}

浮点型转字符串
 浮点型转字符串原理和整形转字符串原理差不多,刚开始需要把浮点型数据的整数部分取出来进行转换,最后再根据对小数点精确的位数进行四舍五入,比如对1.23进行四舍五入的话就是((int)(12.3+0.5)/10.0,相当于将12.8强制转换为整形后结果1然后除以10结果为1.2,即为四舍五入后的结构。具体实现函数如下所示。

/**
 * @brief 浮点型数据转化到字符串
 * @param slope  浮点型数据
 * @param buffer  字符串
 * @param n  小数点后几位
 */
void float2string(float slope,char* buffer,int n)
{
    int temp,i,j;
    int x=0;
    float absslope=0;
    if(slope>=0)//判断是否大于0
    {
        absslope = slope;
        buffer[0] = '+';
    }
    else if(slope==0)
    {
        buffer[0] = '0'; 
        buffer[1] = '\0';
        return ;
    }
    else
    {
        buffer[0] = '-';
        absslope = -slope;
    }
    temp = (int)absslope;//取整数部分
    for(i=0;temp!=0;i++)//计算整数部分的位数
        temp /=10;
    temp =(int)absslope;
    for(j=i;j>0;j--)//将整数部分转换成字符串型
    {
        if(slope>=0) buffer[j-1] = temp%10+'0';
        else buffer[j] = temp%10+'0';
        temp /=10;
    }
    if(slope>=0) 
    {
        x=i+1;
        buffer[i] = '.';
    }
    else
    {
        x=i+2;
        buffer[i+1] = '.';
    }
    absslope -=(int)absslope;
    
    for(i=x;i<x+n;i++)//将小数部分转换成字符串型
    {
       absslope*=10;
       if(i==x+n-1)
       {
    	   absslope+=0.5;
       }
        buffer[i]=(int)absslope+'0';
        absslope-=(int)absslope;
    }
    buffer[x+n] = '\0';
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值