下面是我在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;}