unsigned short getNumDigits(unsigned long l, unsigned char base) { return (1 + floor(log10(l) / log10(base))); } char* longToCharBased(unsigned long l, unsigned char base) { unsigned short dig_num = getNumDigits(l, base); unsigned long res = l, mod = 0; char buf[dig_num+1]; buf[dig_num] = 0; while( res != mod ) { --dig_num; buf[dig_num] = res % base; res = res / base; if(buf[dig_num] < 10) buf[dig_num] += DIGIT_SHIFT; else buf[dig_num] += UPPER_SHIFT; } printf("Converting: (%ld)base10 to (%s)base%u \n", l, (char*)buf, base); char* o = (char*) buf; return o; } ----- usage: longToCharBased(151515,16)