一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
123
返回列表 发新帖
楼主: HGQ21102
收起左侧

[其他综合] 整数怎样转换成字符串?

[复制链接]
发表于 2014-5-27 15:17 | 显示全部楼层
+'0'后不连接成一个字符串吗?还是逐个字符打印?
 楼主| 发表于 2014-5-27 16:25 | 显示全部楼层
本帖最后由 HGQ21102 于 2014-5-27 16:28 编辑

各位不好意思,都不记得回答大字的贴了,我参考网上自己写了个,大家看看怎么样,感觉不太好(当然俺的水平就这样了)

void Integer_show (u16 x, u16 y, u16 fc, u16 bc, unsigned long num, u16 num_bit)//整数显示:  X,  y,  字体颜色,  背景颜色,  显示数据, 数据位数
{
        unsigned char dat_1[10],dat_2[10];
        unsigned char ii=0,k=0,u=0,m=0;        
        signed   char i=0;
        for (i = 0; i < 10; i++)//初始化数据
        {
                dat_1 = 0;dat_2 = 0;
        }        
        i = 0;
        while (num / 10)                //拆位
        {
                dat_1 = num % 10;        //最高位
                num /= 10;        //除后赋值,减去最高位数后赋值给num
                i++;
        }
        dat_1 = num;                //最高位
        ii = i+1;                //保存dat的位数        
        u = i+1;
        for (k = 0; k < u ; k++)//字符串返转,如“12345”变成“54321”
        {
                dat_2[k] = dat_1[ii-1];
                ii--;
        }
        for (; i >= 0; i--)        //转化成ASCII               
        {
                dat_2 += 48;
        }        
        for (i=x;i<(x+(8*num_bit));i++)        //清显示区域        
        {
                for (m=y;m<(y+16);m++)
                {
                        Gui_DrawPoint(i,m,bc);
                }
        }
        Gui_DrawFont_GBK16(x, y, fc, bc, dat_2 );        //显示数据(字符串)
}

发表于 2014-6-16 14:47 | 显示全部楼层
看一下我原创的算法吧,很小巧很简便且通用,执行效率很高,非常适合51这种资源少速度低的单片机用
/*
程序功能:将任意无符号整型数值(最大32位数)转换为字符串,如1234567转为"1234567",数值124转为"124"
传入参数:待转换整型值(最大32位)
传出参数:转换后的字符串首地址指针,可直接被打印函数调用如printf(Data2String(1234567))
*/
uchar data *Dat2String(unsigned long  InputDat)//将数字变为字符串,前面不补0,返回字符串首地址       
{
uchar data i=10;//运算10次
uchar data SRT=0;
unsigned long code Base[]={1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};        //基数
static uchar data Strtab[11];
uchar  data *Pointer=Strtab;
while(i--)
{
  *Pointer=InputDat/Base[i]+'0';
  InputDat=InputDat%Base[i];
  if(*Pointer!='0') {SRT=1;}
  if(SRT) {Pointer++;}
}
*Pointer='\0';//补回字符串结束
return Strtab;
}
看一下keil生成的代码大小:data=22.0  xdata=5 code=463
执行速度:在普通51单片机12M晶振下转换一次32位数不到0.4ms
发表于 2014-6-16 16:16 | 显示全部楼层
看看下列C51可以吗?

//------变量定义--------
xdata u8 Str[7];  //用于临时存放"整数转换为字符串"的数组(最后一个是"0"值,作为"\0"结束符)(下标=要转换的位数+1,当前是6位)

//---10的n次方函数(nn=次方数)---
u16 pow_1(u8 nn)
{
    u8 i;
    u16 temp=10;
    for(i=1; i<nn; i++)
    {
        temp *= 10;
    }
    return temp;
}
//---将整数转换为字符串(需10的n次方函数配合)---
void Int_To_Str_1(u16 Data, u8 nn)
{
    u8 i;
    for(i=0; i<nn; i++)
    {
        Str[i]=(Data%(pow_1(nn-i)))/(pow_1(nn-1-i))+0x30;
    }
    Str[nn]=0;  //最后一个是"0"值,作为"\0"结束符
}
//-------调用-----

...
Int_To_Str_1(i,6);  //i=要转换的整数,第二个参数6是要转换出的位数
LCD_w_ASII_str(0,3,Str);  //显示函数
...
发表于 2014-6-17 09:52 | 显示全部楼层
#include "stdio.h"


unsigned char dat[100];

float  temp=1234.00;

sprintf(dat,"%07,2f",temp);

显示函数(....dat);

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-6-17 22:40 , Processed in 0.046915 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表