int num2str(int num, char *str, unsigned int minlen, unsigned int maxlen)
{
        unsigned int i,d,n,k;
        /* sanity check */
        if(num<0 || minlen==0 || maxlen==0) {
                *str='\0';
                return(0);
        }
        /* safe method to get the divisor */
        for(n=d=1,i=1;i<maxlen && !(d>1 && (d/n)!=10);i++,n=d,d*=10)
                ;
        if(d>1 && (d/n)!=10) {
                i--;
                d=n;
        }
        /* extract the digits */
        for(k=0;d>0;i--,d/=10) {
                n=(((unsigned int)num)/d)%10;
                if(n!=0 || minlen>=i) {
                        str[k++]=n+'0';
                        minlen=i;
                }
        }
        /* terminate string */
        str[k]='\0';
	return(k);
}


int hexnum2str(int hexnum, char *str, unsigned int numdigits)
{
	int k,s;
	int c;
	if(hexnum<0 || numdigits==0) {
		*str='\0';
		return(0);
	}
	for(k=0,s=(numdigits-1)*4;k<numdigits;k++,s-=4) {
		c=(((unsigned int)hexnum)>>s)&0xf;
		str[k]=((c<10)?(c+'0'):(c+'a'-10));
	}
	str[k]='\0';
	return(k);
}