64 lines
1.4 KiB
C
64 lines
1.4 KiB
C
#include "rad1o_itoa.h"
|
|
|
|
/* flags:
|
|
F_ZEROS Print with leading zeros
|
|
F_LONG Print with leading spaces
|
|
F_SPLUS Prefix '+' on positive number
|
|
F_SSPACE Prefix ' ' on positive numbers
|
|
F_HEX Print as (fixed-width) hex number
|
|
*/
|
|
|
|
#define LEN 11 /* Maximum length we support */
|
|
const char* IntToStr(int num, unsigned int mxlen, char flag){
|
|
static char s[LEN+1];
|
|
unsigned int len;
|
|
s[LEN]=0;
|
|
char neg=0;
|
|
|
|
if(flag&F_HEX){
|
|
unsigned int hex=num;
|
|
for (len=(LEN-1);len>=(LEN-mxlen);len--){
|
|
s[len]=(hex%16)+'0';
|
|
if(s[len]>'9')
|
|
s[len]+='A'-'9'-1;
|
|
hex/=16;
|
|
};
|
|
len++;
|
|
}else{
|
|
if(num<0){
|
|
num=-num;
|
|
neg=1;
|
|
};
|
|
|
|
for (len=(LEN-1);len>=(LEN-mxlen);len--){
|
|
s[len]=(num%10)+'0';
|
|
num/=10;
|
|
};
|
|
len++;
|
|
|
|
if(!(flag&F_LONG)){
|
|
while(s[len]=='0' && len < (LEN-1))
|
|
len++;
|
|
}else if(!(flag&F_ZEROS)){
|
|
int x=len;
|
|
while(s[x]=='0' && x < (LEN-1)){
|
|
s[x]=' ';
|
|
x++;
|
|
};
|
|
}
|
|
|
|
if(neg==1){
|
|
len--;
|
|
s[len]='-';
|
|
}else if(flag&F_SPLUS){
|
|
len--;
|
|
s[len]='+';
|
|
}else if(flag&F_SSPACE){
|
|
len--;
|
|
s[len]=' ';
|
|
};
|
|
};
|
|
return &s[len];
|
|
}
|
|
#undef LEN
|