当前位置: 代码迷 >> 单片机 >> keil里面itoa函数,该怎么处理
  详细解决方案

keil里面itoa函数,该怎么处理

热度:69   发布时间:2016-04-28 15:57:54.0
keil里面itoa函数
下面是我在keil里面自己写的itoa函数,前提是这里不涉及有符号的数,请问要怎么改下面这个程序
char *itoa(int value,char *str,int redix)
{
uint j,k;
// string *string1;
uchar xdata p[30];
for(j=0;value!=0;j++)
{
p[j]=value%2;
value=value/2;

}
for(k=j-1;k>=0;j--)
{  
sprintf(sumsz,"%.30s",p[k]);
}

return sumsz;

上面这样做肯定行不通,这里的sumsz是一个uchar数组,我要怎么改才能把得到的二进制数送到sumsz中,求指教

------解决方案--------------------
我有一个C文件,不知道符不符合楼主要求
用到一个全局数组

主要函数
uint8_t * ltos(需要的字符长长度,左对齐或者又对齐,LONG型数据)

假设需要将12345转换成4个字符的字符串则可以直接在程序中
strcpy(stra,ltos(4,AL,12345);

C/C++ code
#include <stdint.h>#include "user.h"#include "stringx.h"uint8_t strbuf[32];uint8_t * ltos(uint8_t lenth,bool lr,long num){    bool s;    uchar i,j;    for(i=0;i<17;i++)strbuf[i]=0;    if(lenth>16)lenth=16;    if(num<0){num=-num;s=1;}else s=0;    for(i=0;i<lenth;i++)    {        strbuf[15-i]=num%10+'0';        num/=10;    }                                            //0000,0000,'0'1'2'3','4'5'6'7'    for(i=0;i<16;i++)    {        if(strbuf[0]==0)                            //前面没有%10+'0'的部分        {            for(j=0;j<16;j++)strbuf[j]=strbuf[j+1];    //数组整体左移        }    }                                            //'0'1'2'3','4'5'6'7',0000,0000    if(lr==AL)                                     //靠左显示    {        if(s==1)        {            strbuf[0]='-';            for(i=1;i<lenth;i++)            {                if(strbuf[1]=='0')                     //去掉左边的无效'0'                {                    for(j=1;j<16;j++)strbuf[j]=strbuf[j+1];//数组整体左移                }else break;                            //'1'2''3'4','5'6'7'0,0000,0000            }        }        else        {            for(i=0;i<lenth;i++)            {                if(strbuf[0]=='0')                     //去掉左边的无效'0'                {                    for(j=0;j<16;j++)strbuf[j]=strbuf[j+1];//数组整体左移                }else break;;                            //'1'2''3'4','5'6'7'0,0000,0000            }        }        if(strbuf[0]==0)strbuf[0]='0';    }    else   //靠右显示                             //'0'1'2'3','4'5'6'7',0000,0000    {        if(s==1)        {            strbuf[0]='-';            for(i=1;i<(lenth-1);i++)//清除左边的'0'            {                if(strbuf[i]=='0'){strbuf[i]=strbuf[i-1];strbuf[i-1]=' ';}                else break;            }        }        else        {            for(i=0;i<(lenth-1);i++)//当要显示的值为0时不能清除            {                if(strbuf[i]=='0')strbuf[i]=' ';            //位数不足左边用空格填充,('~'+2)1'2'3','4'5'6'7',0000,0000                else break;            }        }        if(strbuf[lenth-1]==' ')strbuf[lenth-1]=0;    }    return strbuf;}//将num转换成小数字符串 -123-->-0.0123uint8_t * ftos4(long num){    if(num<0){strbuf[0]='-';num=-num;}else strbuf[0]=' ';    strbuf[1]=(num/10000)%10+'0';    strbuf[2]='.';    strbuf[3]=(num/1000)%10+'0';    strbuf[4]=(num/100)%10+'0';    strbuf[5]=(num/10)%10+'0';    strbuf[6]=num%10+'0';    strbuf[7]=0;    return strbuf;}uint8_t * ftos5(long num){    if(num<0){strbuf[0]='-';num=-num;}else strbuf[0]=' ';    strbuf[1]=(num/100000)%10+'0';    strbuf[2]='.';    strbuf[3]=(num/10000)%10+'0';    strbuf[4]=(num/1000)%10+'0';    strbuf[5]=(num/100)%10+'0';    strbuf[6]=(num/10)%10+'0';    strbuf[7]=num%10+'0';    strbuf[8]=0;    return strbuf;}/*----------------------FunctionName:    ftos32Description:    将 num转换成小数字符串,3位整数,2位小数.123456-->"234.56"Parameter:Return:Note:----------------------*/uint8_t * ftos32(long num){    if(num<0){strbuf[0]='-';num=-num;}else strbuf[0]=' ';    strbuf[1]=(num/10000)%10+'0';    if(strbuf[1]=='0')    {        if(strbuf[0]=='-')        {            strbuf[0]=' ';strbuf[1]='-';        }        else strbuf[1]=' ';    }    strbuf[2]=(num/1000)%10+'0';    if(strbuf[2]=='0')    {        if(strbuf[1]==' ')strbuf[2]=' ';        else if(strbuf[1]=='-')        {            strbuf[1]=' ';            strbuf[2]='-';        }    }    strbuf[3]=(num/100)%10+'0';    strbuf[4]='.';    strbuf[5]=(num/10)%10+'0';    strbuf[6]=num%10+'0';    strbuf[7]=0;    return strbuf;}/*----------------------FunctionName:Description:    给一个数字字符串中间插入小数点,n为小数位数Parameter:Return:Note:            数字个数长度不得超过64                如果字符串是靠左显示则-7-->-0.7可能会出问题----------------------*/uint8_t * addp(uint8_t *ptr,uint8_t n){    uint8_t i,j,p;    uint8_t err[2]={0,0};    for(i=0;i<64;i++)//寻找结束符    {        if(ptr[i]==0)break;    }    j=p=i;    if(i>60)return err;//!    ptr[j+1]=0;//结束符后移一位    for(i=0;i<n;i++)//有1位小数需要移动1次    {        ptr[j]=ptr[j-1];        j--;    }    ptr[j]='.';    if(ptr[j-1]==' ')ptr[j-1]='0';//补零,1-->0.1    else if(ptr[j-1]=='-'){ptr[j-1]='0';ptr[j-2]='-';}//靠左显示的话会出问题    return ptr;}
  相关解决方案