打印
[DSP编程]

浮点数转换成ASCII码

[复制链接]
5608|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
七颗咖啡豆|  楼主 | 2015-7-3 11:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*将浮点数处理为ASCII码
        6位有效数字,这里为了整齐 如:0.01234当作6位有效数字
*/
void float_TO_ascii(float a, uint8_t dat[10])
{
       
        if(1000<=a&&a<10000)
        {
                dat[0] = (int)a%10000/1000 + 0x30;
                dat[1] = (int)a%1000/100 + 0x30;
                dat[2] = (int)a%100/10 + 0x30;
                dat[3] = (int)a%10 + 0x30;
                dat[4] = 0x2e;
                dat[5] = (int)(a*10)%10 + 0x30;
                dat[6] = (int)(a*100)%10 + 0x30;
                dat[7] = 0;
                dat[8] = 0;
                dat[9] = 0;
        }
        if(100<=a&&a<1000)
        {
                dat[0] = (int)a%1000/100 + 0x30;
                dat[1] = (int)a%100/10 + 0x30;
                dat[2] = (int)a%10 + 0x30;
                dat[3] = 0x2e;
                dat[4] = (int)(a*10)%10 + 0x30;
                dat[5] = (int)(a*100)%10 + 0x30;
                dat[6] = (int)(a*1000)%10 + 0x30;
                dat[7] = (int)(a*10000)%10 + 0x30;
                dat[8] = 0;
                dat[9] = 0;       
        }
        if(10<=a&&a<100)
        {
                dat[0] = (int)a%100/10 + 0x30;
                dat[1] = (int)a%10 + 0x30;
                dat[2] = 0x2e;
                dat[3] = (int)(a*10)%10 + 0x30;
                dat[4] = (int)(a*100)%10 + 0x30;
                dat[5] = (int)(a*1000)%10 + 0x30;
                dat[6] = (int)(a*10000)%10 + 0x30;
                dat[7] = (int)(a*100000)%10 + 0x30;
                dat[8] = 0;
                dat[9] = 0;
        }
        if(1<=a&&a<10)
        {
               
                dat[0] = (int)a%10 + 0x30;
                dat[1] = 0x2e;
                dat[2] = (int)(a*10)%10 + 0x30;
                dat[3] = (int)(a*100)%10 + 0x30;
                dat[4] = (int)(a*1000)%10 + 0x30;
                dat[5] = (int)(a*10000)%10 + 0x30;
                dat[6] = (int)(a*100000)%10 + 0x30;
                dat[7] = 0;
                dat[8] = 0;
                dat[9] = 0;
        }
        if(0<=a&&a<1)
        {
               
                dat[0] = 0x30;
                dat[1] = 0x2e;
                dat[2] = (int)(a*10)%10 + 0x30;
                dat[3] = (int)(a*100)%10 + 0x30;
                dat[4] = (int)(a*1000)%10 + 0x30;
                dat[5] = (int)(a*10000)%10 + 0x30;
                dat[6] = (int)(a*100000)%10 + 0x30;
                dat[7] = 0;
                dat[8] = 0;
                dat[9] = 0;
        }
        if(-1<a&&a<0)
        {
                dat[0] = 0x2d;
                dat[1] = 0x30;
                dat[2] = 0x2e ;
                dat[3] = (int)(-a*10)%10 + 0x30;
                dat[4] = (int)(-a*100)%10 + 0x30;
                dat[5] = (int)(-a*1000)%10 + 0x30;
                dat[6] = (int)(-a*10000)%10 + 0x30;
                dat[7] = (int)(-a*100000)%10 + 0x30;
                dat[8] = 0;
                dat[9] = 0;
        }
        if(-10<a&&a<=-1)
        {
                dat[0] = 0x2d;
                dat[1] = (int)(-a)%10 + 0x30;
                dat[2] = 0x2e ;
                dat[3] = (int)(-a*10)%10 + 0x30;
                dat[4] = (int)(-a*100)%10 + 0x30;
                dat[5] = (int)(-a*1000)%10 + 0x30;
                dat[6] = (int)(-a*10000)%10 + 0x30;
                dat[7] = (int)(-a*100000)%10 + 0x30;
                dat[8] = 0;
                dat[9] = 0;
        }
        if(-100<a&&a<=-10)
        {
                dat[0] = 0x2d;
                dat[1] = (int)(-a)%100/10 + 0x30;
                dat[2] = (int)(-a)%10 + 0x30;
                dat[3] = 0x2e ;
                dat[4] = (int)(-a*10)%10 + 0x30;
                dat[5] = (int)(-a*100)%10 + 0x30;
                dat[6] = (int)(-a*1000)%10 + 0x30;
                dat[7] = (int)(-a*10000)%10 + 0x30;
                dat[8] = 0;
                dat[9] = 0;       
        }
        if(-1000<a&&a<=-100)
        {
                dat[0] = 0x2d;
                dat[1] = (int)(-a)%1000/100 + 0x30;
                dat[2] = (int)(-a)%100/10 + 0x30;
                dat[3] = (int)(-a)%10 + 0x30;
                dat[4] = 0x2e ;
                dat[5] = (int)(-a*10)%10 + 0x30;
                dat[6] = (int)(-a*100)%10 + 0x30;
                dat[7] = (int)(-a*1000)%10 + 0x30;
                dat[8] = 0;       
                dat[8] = 0;
        }
        if(-10000<a&&a<=-1000)
        {
                dat[0] = 0x2d;
                dat[1] = (int)(-a)%10000/1000 + 0x30;
                dat[2] = (int)(-a)%1000/100 + 0x30;
                dat[3] = (int)(-a)%100/10 + 0x30;
                dat[4] = (int)(-a)%10 + 0x30;
                dat[5] = 0x2e ;
                dat[6] = (int)(-a*10)%10 + 0x30;
                dat[7] = (int)(-a*100)%10 + 0x30;
                dat[8] = 0;
                dat[9] = 0;       

        }
                          
}

有木有无聊的同学们,帮忙把空间复杂读缩小下,算法优化下:lol

相关帖子

沙发
596142041| | 2015-7-5 21:37 | 只看该作者
这也太复杂了吧。。。。

使用特权

评论回复
板凳
海中水| | 2015-7-6 14:28 | 只看该作者
我去,你想干什么啊!

使用特权

评论回复
地板
七颗咖啡豆|  楼主 | 2015-7-8 10:42 | 只看该作者
596142041 发表于 2015-7-5 21:37
这也太复杂了吧。。。。

浮点数转换成字符串送串口而已:lol

使用特权

评论回复
5
596142041| | 2015-7-8 12:35 | 只看该作者
七颗咖啡豆 发表于 2015-7-8 10:42
浮点数转换成字符串送串口而已

我见过比较好的办法就是采用共用体的方式来实现效果不错,但是这需要考虑的是同一系列的MCU是没问题,如果不同系列的控制器不知道行不行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

508

帖子

4

粉丝